没有使用非字符串键的json.marshal映射

时间:2014-06-18 11:41:18

标签: json go

我想将map[int]string转换为json,因此我认为json.Marshal()可以解决这个问题,但它不能说不支持的类型map[int]string。但是,如果我使用带有键字符串的map,它可以正常工作。

http://play.golang.org/p/qhlS9Nt8qQ

稍后检查marshaller代码时,会显式检查密钥是否不是字符串并返回UnsupportedTypeError ...

为什么我甚至不能使用原语作为键?如果json标准不允许非字符串键,那么不应该json.Marshal将原语转换为字符串并将它们用作键吗?

1 个答案:

答案 0 :(得分:13)

这不是因为Go,而是因为Json:Json不支持键的字符串以外的任何东西。

看看Json的语法:

pair
    string : value
string
    ""
    " chars "

完整语法可在Json website上找到。

不幸的是,要将整数用作键,您必须事先将它们转换为字符串,例如使用strconv.Itoajson包不能完成这项工作。