java json数据的递归遍历及其它处理
json
适用于现代 C++ 的 JSON。
项目地址:https://gitcode.com/gh_mirrors/js/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
GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e
3 个月前
8c391e04
6 个月前
更多推荐
已为社区贡献8条内容
所有评论(0)