Json之java解析

Jackson应该是目前最流行的java解析json文件的方式,首先了解下Jackson的基本知识: http://www.cnblogs.com/lee0oo0/articles/2652528.html

下载jar包 jackson-all-1.9.11.jar

有个这样的Json示例文件,可以看得出来这是个相对复杂的json文件:

{ "search": { "entry": [
{ "dn": "uid=823798897,c=us,ou=bluepages,o=ibm.com",
"attribute": [
{ "name": "alternatenode", "value": [ "RALVM8" ] },
{ "name": "tieline", "value": [ "352-0000" ] },
{ "name": "mail", "value": [ "hwpmgr7@us.ibm.com" ] },
{ "name": "uid", "value": [ "823798897" ] },
{ "name": "floor", "value": [ "1" ] },
}
],
"return": {
"code": 0,
"message": "Success",
"count": 1
}
} }

这里我通过简单数据绑定也就是Java Map来解析这个文件,也可以通过java bean来解析,但是因为我用到的数据比较单一,就不想麻烦从新建立java bean了

以下是java代码:

    public static void parseJson(String str) throws JsonParseException, JsonMappingException, IOException{
        
        ObjectMapper mapper = new ObjectMapper();  
        System.out.println(str);
        Map<String, Map<String, List<Map<String,List<Map<String,List<String>>>>>>> map = mapper.readValue(str, Map.class);
        System.out.println(map.get("search").get("entry").get(0).get("attribute").get(0).get("value").get(0));
    }

通过以上代码应该可以看得出来我在定义的时候已经对以上的文件做了分析

通常来说对于一个对象 可以定义为Map<String,Object>

对于一个数组 可以定义为List<Object>

map.get(key)  这个就是得到map中key的value 

.get(0) 这个就是获得数组中的第一个 如果要遍历数组就这样:

        Iterator<?> iterator = map.get("search").get("entry").get(0).get("attribute").iterator();   
        while ( iterator.hasNext() ) {
            Map<String,List<String>> sm = (Map<String, List<String>>) iterator.next();
             System.out.println(sm.get("name")+sm.get("value").get(0));
        }

这里要注意的是最后一个[]依然是一个数组,所以还是要用List来处理。

但如果是一个String一个List的组合 可以这样Map<String,?>:

Iterator<?> iterator = map.get("search").get("entry").get(0).get("attribute").iterator();   
        while ( iterator.hasNext() ) {
            Map<String,?> sm = (Map<String, ?>) iterator.next();
            if(sm.get("name").toString().equals(name)){
                return (((List<String>) sm.get("value")).get(0)).toString();
            }
        }
原文地址:https://www.cnblogs.com/goldenRazor/p/5102677.html