使用递归方法遍历json中所有的key:value
最近被一个问题难到过,业务提出将数据库中存储的json整体解析出来,提取需要的key以供数据分析。
问题是json的格式大体一致,但是细节方面多有不同,比如
{key1:[{key:value,key:value,key:value},{key:value,key:value,key:value}{key:value,key:value,key:value}],key:value,key:{key:value,key[{key:value},{key:value}]}}
{key1:[{key:value,key:value},{key:value,key:value,key:value}{key:value,key:value,key:value,key:value}],key:value,key:{key:value,key[{key:value},{key:value}]}}
大量类似类似于这样的json,一开始使用if else 来判断发现这样代码量太大,判断的key针对整个数据库数百万条数据来说总是不全。于是就想找一个通用办法来解析。
public static void jsonIterator(String json, List<String>list ) { //如果字符串中没有":"说明json中不可能是json if (json.indexOf(":")==-1) { return; } //判断传入数据是否是一个json数组 if (json.startsWith("[{")) { JSONArray jsonArray = JSONArray.fromObject(json); for (int i = 0; i < jsonArray.size(); i++) { jsonIterator(json, list); } }else { JSONObject jsonObject = JSONObject.fromObject(json); Iterator<String> iterator = jsonObject.keys(); while (iterator.hasNext() ) { String key = iterator.next().toString(); String val = jsonObject.getString(key); //如果value的值是一个josnarray 或者是jsonobject则再次递归 if (val.startsWith("[{")||val.startsWith("{")) { jsonIterator(json, list); }else { list.add(key+":"+val); } } } }
以上方法也可以将list改成map,当然只适用key不重复的情况。各位道友可以酌情修改
上一篇:
IDEA上Java项目控制台中文乱码