一、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

GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e 3 个月前
8c391e04 6 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐