Java解码JSON

Java解码JSON,java,json,map,Java,Json,Map,我正在尝试解码json字符串以映射 我知道有很多这样的问题,但我需要非常具体的格式。例如,我有json字符串: { "map": { "a": "b", "c": "d", }, "map2": { "aa": "bb", "cc": "dd", }, "something": "a", "something2": "b" } 我需要得到如下结果: "map.a" => "b"

我正在尝试解码json字符串以映射

我知道有很多这样的问题,但我需要非常具体的格式。例如,我有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库,但我不需要那么多函数,只需要解码并存储在JavaMap中。如果没有简单的方法,我会为此编写自己的算法,我希望不会那么难


感谢您的帮助。

要准确解析JSON,您需要为它定义一个合适的解析器,编写它们并不困难,只需要花费时间。我的建议是找到一个相当轻量级的JSON解析器,然后为其编写一个decorator,以获得所需的映射格式。尽管如此,如果要处理大量JSON,不幸的是会增加开销。

要准确解析JSON,您需要为它定义一个合适的解析器,编写它们并不十分困难,只需要花费时间。我的建议是找到一个相当轻量级的JSON解析器,然后为其编写一个decorator,以获得所需的映射格式。尽管如此,如果要处理大量JSON,不幸的是会增加开销。

我认为您不会找到现成的解决方案,因为这是一种非标准表示。我的建议是使用JSON库将JSON字符串转换为Java映射,然后对该映射进行深度优先遍历,将其转换为所需的表示形式。

我认为您不会找到现成的解决方案,因为这是一种非标准表示形式。我的建议是使用JSON库将JSON字符串转换为Java映射,然后对该映射进行深度优先遍历,将其转换为所需的表示形式。

我使用了
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));
            }

        }
    }
HashMap content=null;
HashMap结果=新建HashMap();
试一试{
JsonFactory工厂=新的JsonFactory();
ObjectMapper mapper=新的ObjectMapper(工厂);
TypeReference typeRef=新的TypeReference(){
};
content=mapper.readValue(jsonString,typeRef);
}捕获(例外情况除外){
System.out.println(“异常:+ex”);
} 
//现在内容里面什么都有了
for(字符串s:content.keySet()){
对象obj=content.get(s);
if(字符串的obj实例){
结果。输入(s,(字符串)obj);
}否则{
HashMap hm=(HashMap)obj;
对于(字符串s2:hm.keySet()){
结果:put(s+““+s2,hm.get(s2));
}
}
}

编辑:经过测试,正在工作

我使用了
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));
            }

        }
    }
HashMap content=null;
HashMap结果=新建HashMap();
试一试{
JsonFactory工厂=新的JsonFactory();
ObjectMapper mapper=新的ObjectMapper(工厂);
TypeReference typeRef=新的TypeReference(){
};
content=mapper.readValue(jsonString,typeRef);
}捕获(例外情况除外){
System.out.println(“异常:+ex”);
} 
//现在内容里面什么都有了
for(字符串s:content.keySet()){
对象obj=content.get(s);
if(字符串的obj实例){
结果。输入(s,(字符串)obj);
}否则{
HashMap hm=(HashMap)obj;
对于(字符串s2:hm.keySet()){
结果:put(s+““+s2,hm.get(s2));
}
}
}

编辑:经过测试,正在工作

即使您使用自己的算法以点表示法生成密钥,我仍然建议您使用解码器库。边缘情况太多,可能会导致严重的错误,比如字符串转义规则。即使您使用自己的算法以点表示法生成密钥,我仍然建议您使用解码器库。有太多的边缘情况,可能会导致讨厌的错误,如字符串转义规则。这正是我需要的!谢谢!:)正是我需要的!谢谢!:)