今晚我可能有点累了,但这就是:
我想有GWT HashMap到/从JSON。我该如何做到这一点?
换句话说,我想取一个HashMap
,取其JSON表示,将其存储在某个地方,并将其返回到其原生Java表示。
这是我的快速解决方案:
public static String toJson(Map<String, String> map) {
String json = "";
if (map != null && !map.isEmpty()) {
JSONObject jsonObj = new JSONObject();
for (Map.Entry<String, String> entry: map.entrySet()) {
jsonObj.put(entry.getKey(), new JSONString(entry.getValue()));
}
json = jsonObj.toString();
}
return json;
}
public static Map<String, String> toMap(String jsonStr) {
Map<String, String> map = new HashMap<String, String>();
JSONValue parsed = JSONParser.parseStrict(jsonStr);
JSONObject jsonObj = parsed.isObject();
if (jsonObj != null) {
for (String key : jsonObj.keySet()) {
map.put(key, jsonObj.get(key).isString().stringValue());
}
}
return map;
}
不是最优化的,但应该易于编码:使用JSONObject
迭代你的地图的条目,并在JSONObject
中put
它们(将每个值转换为适当类型的JSONValue
),然后调用toString
以获得JSON表示。
对于解析,使用JSONParser
获得JSONObject
,然后迭代keySet
, get
的值并将它们放入映射中(在打开JSONValue
s之后)
但是要小心你使用的钥匙!在JS中,你不能使用任何类型的键作为属性名;浏览器中的JSON处理总是涉及到通过一个JS对象(或者自己实现JSON解析器,这不会执行相同的操作)