Unfortunately we cannot do it that way generally. BitShares uses FC which uses generic reflection to handle serialization format.
Thus you end up with a map<Key,Value> being serialized as an array< pair<Key,Value> >
And a pair<Key,Value> is serialized as an array with two values [ Key, Value ]
And the Key/Value are serialized dependent upon their type which could be anything.
If the Key were an object, array, or some other complex type then you couldn't serialize it as a string.
From a binary perspective the serialization is perfectly efficient, but it looks odd from a JSON interpretation of the same serialization.
It is also more efficient to represent the key as an integer rather than a quoted string from a parsing perspective.