自定义——无穷递归解析json工具
2013-03-15 10:59
246 查看
package net.liuyx.test; import java.util.HashMap; import java.util.Iterator; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; /** * 该工具将json的层次以url的形式组合成key,然后一层一层地剥,把最底层的value值放在map中。 * 如 interface/product/key, value这样的组合,通过查看key就可以知道json本来的层次感 * 解析jsonArray的时候,会连续出现两个数字隔开的情况,如1/2/key,这便是第一个JSONArray * 底下第二个元素(该元素是JSONArray),在第二个元素底下第三个元素的key值,如此,通过正则表达式 * 也可知道处理的层次json是属于JSONArray还是JSONObject。 * @author user * */ public class JSONParse { private HashMap<String, String> jsonMap = new HashMap<String, String>(); private int layer; public void parseJson(JSONObject jsonObject) { parseJson(jsonObject, null); } private void parseJson(JSONObject jsonObject, String appendKey){ if (jsonObject == null) return; @SuppressWarnings("unchecked") Iterator<String> it = jsonObject.keys(); while (it.hasNext()) { String key = it.next(); JSONArray array = jsonObject.optJSONArray(key); if(appendKey == null) appendKey = key; else appendKey = appendKey + "/" + key; if (array == null){ String value = jsonObject.optString(key); if(value != null && !value.contains("{")){ jsonMap.put(appendKey, value); }else{ parseJson(getJSONObject(value),appendKey); } } else { parseJsonArray(array, -1,layer); } } } private JSONObject getJSONObject(String json){ try { JSONObject result = new JSONObject(json); return result; } catch (JSONException e) { e.printStackTrace(); } return null; } /** * 当index为-1时,表示没有进行jsonArray迭代 * @param array * @param index * @param layer * @return */ private int parseJsonArray(JSONArray array, int index,int layer) { if (array == null) return layer; int lastLayer = layer++; int len = array.length(); for (int i = 0; i < len; i++) { JSONObject obj = (JSONObject) array.opt(i); @SuppressWarnings("unchecked") Iterator<String> it = obj.keys(); while (it.hasNext()) { String key = it.next(); JSONArray a = obj.optJSONArray(key); if (a != null) parseJsonArray(a, i,layer); else { JSONObject jsonObject = getJSONObject(obj.optString(key)); String jsonKey = i + "/" + lastLayer + "/" + key; parseJson(jsonObject, jsonKey); } } } return layer; } public HashMap<String,String> getJSONMap(){ return jsonMap; } }
写起来练练手,跟Google的GSON框架没法比,自我感觉效率不是很高(在循环里面递归,然后又用String,而没有StringBuilder,有时间再优化下)。改天可以学学他的代码 看看是怎么处理的。
相关文章推荐
- C# 自定义Json解析工具
- Json解析工具Jackson(使用注解)--jackson框架自定义的一些json解析注解
- Json解析工具Jackson(使用注解)
- 【COCOS2D-X(1.X 2.X) Json(cpp版)及新加字体库篇】在Cocos2dx引擎中封装、解析Json(cpp版)数据以及添加自定义字体库 .
- 实例解析Json反序列化之ObjectMapper(自定义实现反序列化方法)
- 开源Json处理工具是如何帮我们解析Json的
- Newtonsoft.Json 自定义 解析协议
- JSON解析工具比较,主要GSON和FastJSON
- json和bean的转换工具Jackson ObjectMapper类使用解析
- Json解析工具Jackson(使用注解)
- Json解析工具Jackson(使用注解) .
- Json解析工具Jackson(使用注解)
- 解析json工具
- JSON解析工具比较,主要GSON和FastJSON
- 快速高效解析json的工具---fastjson应用实例
- 简单的json解析工具
- android:json解析的两个工具:Gson和Jackson的使用小例子
- json和bean的转换工具Jackson ObjectMapper类使用解析
- android中json解析的两个工具:Gson和Jackson的使用小demo
- JSON解析工具-org.json