Json文件转Map(二)之解析节点

17 篇文章 0 订阅

说明

    在上一篇博客中,笔者向大家介绍了如何去解析Json并转化为Map。这一篇的博客,笔者主要是介绍如何去提取嵌套Json的节点并保存。例如以下的Json格式:

  {
	"error": 0,
	"status": "success",
	"results": [{
		"currentCity": "青岛",
		"index": [{
			"title": "穿衣",
			"zs": "较冷",
			"tipt": "穿衣指数",
			"des": "建议着厚外套加毛衣等服装。年老体弱者宜着大衣、呢外套加羊毛衫。"
		}, {
			"title": "紫外线强度",
			"zs": "最弱",
			"tipt": "紫外线强度指数",
			"des": "属弱紫外线辐射天气,无需特别防护。若长期在户外,建议涂擦SPF在8-12之间的防晒护肤品。",
			"index7": [{
			"title": "穿衣",
			"zs": "较冷",
			"tipt": "穿衣指数",
			"des": "建议着厚外套加毛衣等服装。年老体弱者宜着大衣、呢外套加羊毛衫。",
			"index8": [{
			"title": "穿衣"
		}, {
			"title": "紫外线强度",
			"zs": "最弱",
			"tipt": "紫外线强度指数",
			"des": "属弱紫外线辐射天气,无需特别防护。若长期在户外,建议涂擦SPF在8-12之间的防晒护肤品。"
		}]
		}, {
			"title": "紫外线强度",
			"zs": "最弱",
			"tipt": "紫外线强度指数",
			"des": "属弱紫外线辐射天气,无需特别防护。若长期在户外,建议涂擦SPF在8-12之间的防晒护肤品。"
		}]
		}],
		"index2": [{
			"title": "穿衣",
			"zs": "较冷",
			"tipt": "穿衣指数",
			"des": "建议着厚外套加毛衣等服装。年老体弱者宜着大衣、呢外套加羊毛衫。"
		}, {
			"title": "紫外线强度",
			"zs": "最弱",
			"tipt": "紫外线强度指数",
			"des": "属弱紫外线辐射天气,无需特别防护。若长期在户外,建议涂擦SPF在8-12之间的防晒护肤品。"
		}],
	}]
}

    这个时候,我们需要提取节点,将提取的节点格式保存为如下形式:

  • index8=results>index>index7>
  • index7=results>index>
  • index=results>
  • index2=results>
  • results=null

分析及实现

我们要将解析到的节点保存到Map中,所以要行定义个Map.其次,我们还是一样的按照不同的对象来解析并放入到Map中。

  • 如果是JSONArray对象,我们需要在上一篇博客的方法中添加以下代码:
     //如果内层还是数组的话,继续解析
                    if (v instanceof JSONArray) {
                        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
                        Iterator<JSONObject> it = ((JSONArray) v).iterator();
                       
                        while (it.hasNext()) {
                        	Object o = it.next();
                        	if(o instanceof JSONObject)
                        	{
                        		
                        		//如果节点不存在,则断续添加
                        		 if(!reserveMap.containsKey(k.toString()))
                        		 {
                        			// System.out.println(k.toString()+"*****oldStr3:"+oldStr+"**present paranmeters:"+nodeMap.get(oldStr));
                        			 returnNodeMap.put(k.toString(), reserveMap.get(fatherName));
                        			 //返回节点中如果存在节点,则取出修改为当前节点信息
                        			 if(returnNodeMap.containsKey(k.toString()))
                        			 {
                        				 String getResValue = returnNodeMap.get(k.toString());
                        				 //已经存在的返回节点不能为空
                        				 if(getResValue != null && !"".equals(getResValue))
                        				 {
                        					 
                        					 currNode= (getResValue.endsWith(">")? getResValue : getResValue+">")+ k.toString()+">";
                        				 }
                        				 else
                        				 {
                        					 currNode +=k.toString()+">";
                        				 }
                        			 }
                        			 //否则添加当前节点
                        			 else
                        			 {
                        				 currNode +=k.toString()+">";
                        			 }
                        			 reserveMap.put(k.toString(),currNode);
                        		 }
                        		 JSONObject json2 = (JSONObject) o;
                                 list.add(json2Map(json2.toString(),index,k.toString(),currNode,reserveMap,returnNodeMap));
                        	}
                           
                        }
                        
                        //保存节点
                        if(!reserveMap.containsKey(k.toString()))
                        {
                        	//System.out.println(k.toString()+">>>>oldStr2:"+oldStr+">>>present paranmeters:"+nodeMap.get(oldStr));
                        	returnNodeMap.put(k.toString(), reserveMap.get(fatherName));
                        	currNode +=k.toString()+">";
                        	reserveMap.put(k.toString(), currNode);
                        	
                        }
                        map.put(k.toString(), list);
                    }
    

     

  • 如果是JsonObject对象,我们需要添加以下代码:
    //还是JsonObject对象,则再次遍历
                    else if(isJsonObject(v.toString())) 
                    {	
                    	//保存返回节点和当前节点
                		 if(!reserveMap.containsKey(k.toString()))
                		 {
                			
                			 //System.out.println(k.toString()+"@@@@@@oldStr1:"+oldStr+">>>present paranmeters:"+nodeMap.get(oldStr));
                			 returnNodeMap.put(k.toString(), reserveMap.get(fatherName));
                			 currNode +=k.toString() + ">";
                			 reserveMap.put(k.toString(), currNode);
                			 
                		 }
                		 
                		json2Map(v.toString(),index,k.toString(),currNode,reserveMap,returnNodeMap);
                		map.put(k.toString(), v);
                    }
    

     

  • 如果是其它的,则不做任何处理。

小结

    以上就是笔者分享的如何解析嵌套Json的节点。笔者这里只给出了部分的代码,后续会将全部代码分享。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值