java json数据的递归遍历及其它处理

一、json数据的递归遍历

/** 一、
	 * 递归遍历JSON对象。
	 * @param objJson
	 */
	 public static void  analysisJson(Object objJson){
		 HashMap<String, Object> map = new HashMap<>();
	    	//如果obj为json数组
	    	if(objJson instanceof JSONArray){
	    		JSONArray objArray = (JSONArray)objJson;
				for (int i = 0; i < objArray.size(); i++) {
					analysisJson(objArray.get(i));
				}
	    	}
	    	//如果为json对象
	    	else if(objJson instanceof JSONObject){
	    		JSONObject jsonObject = (JSONObject)objJson;
				Iterator it = jsonObject.keys();
				while(it.hasNext()){
					String key = it.next().toString();
					Object object = jsonObject.get(key);
					//如果得到的是数组
					if(object instanceof JSONArray){
						JSONArray objArray = (JSONArray)object;
						analysisJson(objArray);
					}
					//如果key中是一个json对象
					else if(object instanceof JSONObject){
						analysisJson((JSONObject)object);
					}
					//如果key中是其他
					else{
						System.out.println("["+key+"]:"+object.toString()+" ");
					}
				}
	    	}
	    }

二、json数据的递归转map

 /**  二、
		 * 递归遍历JSON对象。
		 * @param JsonToMap
		 * @return  Map
		 */
		public static Map<String,Object> IteratorHash(net.sf.json.JSONObject JsonToMap){
			Iterator<?> it = JsonToMap.keys();		
			HashMap<String, Object> RMap = new HashMap<String, Object>(); 
			
			while(it.hasNext()){
				String key = String.valueOf(it.next());
				if(JsonToMap.get(key).getClass() == net.sf.json.JSONArray.class){//判是否为列表
					if(JsonToMap.getJSONArray(key).isEmpty()){//判列表是否为空
						RMap.put(key,null);
					}else{
						
						List<Map<String,Object>> MapListObj=new ArrayList<Map<String,Object>>();
						for(Object JsonArray : JsonToMap.getJSONArray(key)){
							HashMap<String, Object> TempMap = new HashMap<String, Object>();
							if(JsonArray.getClass() == String.class){
								TempMap.put(key, JsonArray);
							}else{
								TempMap.putAll(IteratorHash(net.sf.json.JSONObject.fromObject(JsonArray)));
							}					
							MapListObj.add(TempMap);
						}					
						RMap.put(key, (Object) MapListObj);
					}
				}else if(JsonToMap.get(key).getClass() == net.sf.json.JSONObject.class){
					
					RMap.put(key,JsonToMap.getJSONObject(key));
					
				}else if(JsonToMap.get(key).getClass() == String.class || JsonToMap.get(key).getClass() == Integer.class || JsonToMap.get(key).getClass() == Long.class){
					
					RMap.put(key, JsonToMap.get(key));
					
				}
			}
			return RMap;
		}

测试

 public static void main(String[] args) {
		 String jsonStr = "{"
					+ "\"list1\":"
				    + "[{"
					+ "\"name\":\"daniel\","
					+ "\"age\":\"20\""
					+"},"
					+ "{"
					+"\"name\":\"alisa\","
					+"\"age\":\"18\"" 
					+"}],"
					+ "\"list2\":"
					+ "[{"
					+ "\"name\":\"tom\","
					+ "\"age\":\"22\""
					+"},"
					+ "{"
					+"\"name\":\"ysabell\","
					+"\"age\":\"23\"" 
					+"}],"
					+ "\"hello\": \"java \"" 
					+ "}";
		 
		 JSONObject objJson = JSONObject.fromObject(jsonStr);
		 
		/* 一、*/
	//   JsonTest.analysisJson(objJson);
		 
		 /* 二、*/
	//	 System.out.println(JsonTest.IteratorHash(objJson));
		 
		 /* 三、  FastJson是阿里的开源框架*/
		 Map maps = (Map)JSON.parse(jsonStr);  
		 System.out.println(maps);

	}

三、 FastJson 阿里的开源框架

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson   阿里的开源框架 fastjson  -->
		<dependency>
		    <groupId>com.alibaba</groupId>
		    <artifactId>fastjson</artifactId>
		    <version>1.2.52</version>
		</dependency>

特点:

1.FastJson数度快,无论序列化和反序列化,都是当之无愧的fast
2.功能强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum)
3.零依赖(没有依赖其它任何类库)

FastJson对于json格式字符串的解析主要用到了下面三个类:
1.JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换
2.JSONObject:fastJson提供的json对象
3.JSONArray:fastJson提供json数组对象

用法可参见其它文章等:https://blog.csdn.net/flysun3344/article/details/54707965

                                        https://segmentfault.com/a/1190000011212806

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值