如何使用google-Gson和JSON.stringify获得相同的结果

时间:2012-05-25 12:26:21

标签: java javascript json gson stringify

在我的java代码中,我有一个类为Map<String,String>的o成员的类。我使用谷歌Gson库将对象转换为json字符串,反之亦然。

我想用javascript和json.org中的JSON库做同样的事情。

问题是javascript没有“映射对象”,如果我使用数组来模拟地图,JSON.stringify对数组的结果与Gson在Map<String,String>上的结果不同。

我还尝试使用来自库jshashtable 2.1(http://www.timdown.co.uk/jshashtable/index.html)的Hashtable javascript对象并创建自定义toJSON方法,但这种方法不起作用,因为什么是JSON在这些情况下,是否对自定义toJSON方法返回的对象进行字符串化。

这就是我得到的:

使用java和Gson:

{
    "var_1": "value_1",
    "var_2": "value_2",
    "map": {
        "name_1": "value_1",
        "name_2": "value_2"
    }
}

使用javascript和JSON:

{
    "var_1": "value_1",
    "var_2": "value_2",
    "map": [
        ["name_1", "value_1"],
        ["name_2", "value_2"]
    ]
}

有没有办法解决这个问题并从java和javascript中获取相同的“json字符串”?

提前致谢...

1 个答案:

答案 0 :(得分:1)

  

问题是javascript没有“地图对象”......

是的,确实如此:所有 JavaScript对象都是地图。要获得您想要的内容,您需要创建此对象图:

var obj = {
    "var_1": "value_1",
    "var_2": "value_2",
    "map": {
        "name_1": "value_1",
        "name_2": "value_2"
    }
};

...并在其上使用JSON.stringify

var json = JSON.stringify(obj);

var obj =看起来熟悉后的那一点?那是因为它是一个JavaScript object initializer,而JSON是对象初始化器语法的子集。 :-)如果你愿意,你可以用其他方式构建该对象:

var obj = {};
obj.var_1 = "value_1";
obj.var_2 = "value_2";
obj.map = {};
obj.map.name_1 = "value_1";
obj.map.name_2 = "value_2";

...在调用JSON.stringify之后也会给你同样的东西。