Json – failed to json.marshal map with non string keys

go, json

I want to convert a map[int]string to json, so I thought json.Marshal() would do the trick, but it fails saying unsupported type map[int]string. But whereas if I use a map with key string it works fine.


Later on inspection of the marshaller code, there is an explicit check to see if the key is not string and returns UnsupportedTypeError

Why can't I even use primitives as keys? If json standard doesn't allow non string keys, shouldn't json.Marshal convert the primitives to string and use them as keys ?

Best Solution

It's not because of Go, but because of Json: Json does not support anything else than strings for keys.

Have a look a the grammar of Json:

pair    string : valuestring    ""    " chars "

The full grammar is available on the Json website.

Unfortunately, to use integers as keys, you must convert them to string beforehand, for instance using strconv.Itoa: it is not up to the json package to do this work.