JSON對象轉Map

背景

考慮到業務需求,需要把JSON轉Map寫了兩個工具類(也有參考別的代碼)

兼容了數組和對象混合的JSON

需要注意Map的key不能重複

Map存JSON的所有key

   /**
     * map包括全量的節點
     * @param objJson
     * @param map
     * @param k 遞歸的時候默認用.  入參的時候傳空字符串即可
     * @return
     */
    public static Map<String,String> analysisJson2ALL(Object objJson, Map map, String k){
        //如果obj爲json數組
        if(objJson instanceof JSONArray){
            JSONArray objArray = (JSONArray)objJson;
            for (int i = 0; i < objArray.size(); i++) {
                analysisJson2ALL(objArray.get(i),map, k + "");
            }
        } else if(objJson instanceof JSONObject){
            JSONObject jsonObject = (JSONObject)objJson;
            Set<String> set = jsonObject.keySet();
            for (String field : set) {
                if (!StringUtils.hasText(field)){
                    continue;
                }
                String key=k + field; //每個屬性新key ,遞歸如何?
                Object object = null;
                try{
                    object=JSONObject.parse(jsonObject.getString(field));
                    //如果得到的是數組
                    if(object instanceof JSONArray){
                        JSONArray objArray = (JSONArray)object;
                        map.put(key,JSONObject.toJSONString(object));
                        analysisJson2ALL(objArray,map, key + ".");
                    }
                    //如果key中是一個json對象
                    else if(object instanceof JSONObject){
                        map.put(key,JSONObject.toJSONString(object));
                        analysisJson2ALL(object,map, key + ".");
                    }
                    //如果key中是其他
                    else{
                        if (key!=null&&object!=null){
                            map.put(key,object+"");
                        }
                    }
                }catch (Exception e){
                    if (key!=null&&jsonObject.getString(field)!=null){
                        map.put(key,jsonObject.getString(field));
                    }
                }
            }
        }
        return map;
    }

Map只存葉子結點的key

   /**
     * 只會取葉子節點
     * @param objJson
     * @param map
     * @return
     */
    @SuppressWarnings("rawtypes")
    public static Map<String,String>  analysisJson(Object objJson,Map map){
        //如果obj爲json數組
        if(objJson instanceof JSONArray){
            JSONArray objArray = (JSONArray)objJson;
            for (int i = 0; i < objArray.size(); i++) {
                analysisJson(objArray.get(i),map);
            }
        } else if(objJson instanceof JSONObject){
            JSONObject jsonObject = (JSONObject)objJson;
            Set<String> set = jsonObject.keySet();
            Iterator it =set.iterator();
            while(it.hasNext()){
                String key = it.next().toString();
                Object object = jsonObject.get(key);
                //如果得到的是數組
                if(object instanceof JSONArray){
                    JSONArray objArray = (JSONArray)object;
                    analysisJson(objArray,map);
                }
                //如果key中是一個json對象
                else if(object instanceof JSONObject){
                    analysisJson(object,map);
                }
                //如果key中是其他
                else{
                    map.put(key,object.toString());
                }
            }
        }
        return map;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章