背景
考虑到业务需求,需要把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;
}