最近遇到包含多层的Json字符串解析的问题,查了一些帖子,不能很好解决。看了下帮助文档,用下面方法解决。
上代码
Maven 库
org.json json 20180130
Java 代码
由于业务需要,下面函数里只需要取到各个层级Json中的key, 放到一个集合中。大家也完全可以取完整的key和value. 根据自己需要,稍作修改即可。下面的关键是while 循环中的两个If 语句,很多帖子都没有把这里写清楚,
第一个 if (jsonObj.optJSONArray(key) instanceof JSONArray) 判断这个key 的value 还是不是一个有多层级的JSONArray.
第二个 if (jsonObj.optJSONObject(key) instanceof JSONObject) 判断这个key 的value 是不是一个只有一层的JSONObject.
public static void jsonObjParseRecur(Setset,String jsonText) { try{ JSONObject jsonObj = new JSONObject(jsonText); Iterator keys=jsonObj.keys(); while(keys.hasNext()){ String key = keys.next(); set.add(key);// System.out.println(key+": " + jsonObj.get(key).toString()); if (jsonObj.optJSONArray(key) instanceof JSONArray) { JSONArray jsonArray = jsonObj.getJSONArray(key); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonArrayObj = jsonArray.getJSONObject(i); String jsonArrayObjString = jsonArrayObj.toString(); jsonObjParseRecur(set,jsonArrayObjString); } } if (jsonObj.optJSONObject(key) instanceof JSONObject) { jsonObjParseRecur(set,jsonObj.optJSONObject(key).toString()); } } } catch (JSONException e) { e.printStackTrace(); } // System.out.println(set); }