我试图将json字符串解码为Map。
我知道有很多这样的问题,但我需要非常具体的格式。例如,我有json字符串:
{
"map": {
"a": "b",
"c": "d",
},
"map2": {
"aa": "bb",
"cc": "dd",
},
"something": "a",
"something2": "b"
}
我需要得到如下结果:
"map.a" => "b"
"map.c" => "d"
"map2.aa" => "bb"
"map2.cc" => "dd"
"something" => "a"
"something2" => "b"
我确定按键不包含任何点。我查看了几个JSON库,但是我不需要这么多函数,只需要在Java map中解码和存储。如果没有简单的方法,我会为此编写自己的算法,我希望它不会那么难......
感谢您的帮助。
答案 0 :(得分:1)
要准确地解析JSON,你需要为它定义一个合适的解析器,它们写起来并不是非常困难。我的建议是找到一个相当轻量级的JSON解析器,然后为它编写一个装饰器来获取你正在寻找的地图格式。虽然,如果你正在处理大量的JSON,不幸的是,你会增加开销。
答案 1 :(得分:1)
我认为你不会找到一个开箱即用的解决方案,因为这是一个非标准的表示。我的建议是使用JSON库将JSON字符串转换为Java Map,然后对该Map进行深度优先遍历,将其转换为所需的表示。
答案 2 :(得分:1)
我使用了org.codehaus.jackson
。执行以下操作:
HashMap<String, Object> content = null;
HashMap<String, String> result = new HashMap<String, String>();
try {
JsonFactory factory = new JsonFactory();
ObjectMapper mapper = new ObjectMapper(factory);
TypeReference<HashMap<String, Object>> typeRef = new TypeReference<HashMap<String, Object>>() {
};
content = mapper.readValue(jsonString, typeRef);
} catch (Exception ex) {
System.out.println("Exception : " + ex);
}
// now content has everything inside
for(String s : content.keySet()){
Object obj = content.get(s);
if(obj instanceof String){
result.put(s, (String)obj);
} else {
HashMap<String,String> hm = (HashMap<String,String>)obj;
for(String s2: hm.keySet()){
result.put(s+"."+s2, hm.get(s2));
}
}
}
编辑:经过测试,正常工作