万能解析json

最近很多朋友问到我解析Json的问题,很多都是太复杂,解析起来很麻烦,但大部分都是使用工具进行解析,比如Gson之类的,但是这些有个问题就是要创建一个实体类bean,但是往往在很多开发过程中,后台返回数据是会随着迭代而改变的,这样创建的实体类bean可能也要改变,这里我就说说自己解析的一些心得。

首先我并没有用到第三方的解析工具,而是单纯的使用系统提供的JsonObject和JsonArray。然后获取到的数据字段存储我是用到的HashMap<String,Object>,这样就对于实体类很吻合了,key对应的实体类里面变量名字,value对应实体类里的变量值。如果有集合就可以在HashMap外面套上Arraylist之类的。

下面就开始提供代码块:

private HashMap<String, Object> stringToJsonObject(String response) {
        try {
            JSONObject jsa = new JSONObject(response);
            return JsonToHashMap(jsa);
        } catch (JSONException e) {
            e.printStackTrace();
            return null;
        }
    }

    private HashMap<String, Object> JsonToHashMap(JSONObject jsa) {
        HashMap<String, Object> hashmap = new HashMap<>();
        try {
            for (Iterator<String> keyStr = jsa.keys(); keyStr.hasNext(); ) {
                String key1 = keyStr.next().trim();
                if (jsa.get(key1) instanceof JSONObject) {
                    hashmap.put(key1, jsa.get(key1));
                }
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }
        return hashmap;
    }

这样就可以将一个jsonObject转换成HashMap了,但是HashMap里面还是含有类似Json的,那就再重复上面操作就行了。

下面再来解析JsonObject

 public ArrayList<HashMap<String, Object>> dataListTmp = new ArrayList<HashMap<String, Object>>();
try {
            JSONObject jsonObject = new JSONObject(respanse);
            JSONArray jsonArray = new JSONArray(jsonObject.getString("result"));
            JSONObject jsonObject1 = new JSONObject(jsonArray.get(0).toString());
            JSONArray jsonArray1 = new JSONArray(jsonObject1.getString("Items"));
            for (int i = 0; i < jsonArray1.length(); i++) {
                JSONObject jsoo = jsonArray1.getJSONObject(i);
                HashMap<String, Object> map1 = new HashMap<String, Object>();
                Iterator it = jsoo.keys();
                while (it.hasNext()) {
                    String key = (String) it.next();
                    String value = jsoo.getString(key);
                    map1.put(key, value);
                }
                dataListTmp.add(map1);
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }

通过一个Iterator迭代一下就可以获取到key和value,具体还是需要看看具体需求,随机应变。先将json分析一下,一般公司后台提供json都有一定规律的,因此一些解析方式可以在项目中提取出来,完全可以复用,再也不用去新建bean实体类了,也抛开了第三方工具的使用。


猜你喜欢

转载自blog.csdn.net/greatdaocaoren/article/details/73826711