树形json
所谓的树形json对我个人而言就是多级同属性的json,常见表现为多级联动的地区下拉框。类似于下面这样:(编码数据是网上找来的,别搞我)
[{
"addrNO": "4401",
"addrNM": "广州市",
"addrPNO": "44",
"addrChild": [{
"addrNO": "440103",
"addrNM": "荔湾区",
"addrPNO": "4401",
"addrChild": [{
"addrNO": "440103001000",
"addrNM": "沙面街道",
"addrPNO": "440103",
"addrChild": [{
"addrNO": "440103001101000",
"addrNM": "翠洲居委办事点",
"addrPNO": "440103001000"
}, {
"addrNO": "440103001101001",
"addrNM": "郑测试01社区",
"addrPNO": "440103001000"
}]
}, {
"addrNO": "440103002000",
"addrNM": "岭南街道",
"addrPNO": "440103",
"addrChild": [{
"addrNO": "440103002101000",
"addrNM": "扬仁东居委办事点",
"addrPNO": "440103002000"
}, {
"addrNO": "440103002102000",
"addrNM": "扬仁西居委办事点",
"addrPNO": "440103002000"
}, {
"addrNO": "440103002103000",
"addrNM": "故衣街居委办事点",
"addrPNO": "440103002000"
}]
}]
}]
}]
处理思路
- 首先我的目的是想要把全部节点的NO、NM、PNO拿到,所以我需要创建一个实体类,类中需要带有以上三种属性;
- 假设我们拿到的数据是一串String类型的json串,那么需要转换成JSONArray;
- 拿到JSONArray之后就可以不停的循环遍历了,然后在遍历的过程中获取到需要的信息。
- 结束。
代码
public static void jsonToList(String str,List<ProvincePnoInterface> list,Map<String,String> map) throws Exception{
org.json.JSONArray ja=new org.json.JSONArray(str);
for(int i=0;i<ja.length();i++){
Iterator<?> items=ja.getJSONObject(i).keys();
int j = 1;
while(items.hasNext()){
String keyName=items.next().toString();
System.out.println(keyName+": "+ja.getJSONObject(i).getString(keyName));
if(j<=4){
j = j + 1;
map.put(keyName,ja.getJSONObject(i).getString(keyName));
if(j==4){
ProvincePnoInterface vo = new ProvincePnoInterface();
vo.setAddrNM(map.get("addrNM"));
vo.setAddrPNO(map.get("addrPNO"));
vo.setAddrNO(map.get("addrNO"));
list.add(vo);
}
}else{
j = 1;
}
if("addrChild".equals(keyName))
jsonToList(ja.getJSONObject(i).getString(keyName),list,map);
}
}
}
参数说明:
List list = new ArrayList<>(); // 最终的list
Map<String,String> map = new HashMap<>(); // 用于存储 每一次周期循环的参数
String str = “”; // json串