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; }