将具有不同键类型的映射序列化为json

时间:2012-02-26 10:28:56

标签: java json oop map gson

我有一个从字符串到字符串列表的映射:

"100"  -> ["New York"]
"200"  -> ["Geneva", "Tel Aviv"]
"300"  -> ["Rome", "Paris", "Atlanta"]
"400a" -> ["Los Angeles"]

我想使用gson将其转换为JSON。 99%的键都是整数,但是可能会出现拼写错误(如400a。)我想要的输出是:

{
    100    : ["New York"], 
    200    : ["Geneva", "Tel Aviv"],
    300    : ["Rome", "Paris", "Atlanta"],
    "400a" : ["Los Angeles"]
}

请注意,"400a"是一个字符串,100, 200, 300是整数。

如何以优雅高效的方式转换我的地图?

1 个答案:

答案 0 :(得分:2)

你要做的不是有效的json。请参阅规范:http://www.json.org/。属性名称应始终为字符串,不允许使用数字。如果你想获得以下json:

{
    "100"  : ["New York"], 
    "200"  : ["Geneva", "Tel Aviv"],
    "300"  : ["Rome", "Paris", "Atlanta"],
    "400a" : ["Los Angeles"]
}

当然这很容易:您使用Map<String, String>作为输入(我相信您已经这样做了),或者您可以传入Map<object, String>如果您想允许自己输入两者字符串和整数值。但是,它们仍然只能作为字符串序列化。