1

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

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

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

我还尝试使用库 jshashtable 2.1 (http://www.timdown.co.uk/jshashtable/index.html) 中的 Hashtable javascript 对象并创建自定义 toJSON 方法,但这种方法不起作用,因为 JSON 在这些case 是对自定义 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 字符串”?

提前致谢...

4

1 回答 1

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对象初始化器,而 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

于 2012-05-25T12:30:24.557 回答