java json 层级展开_JSON解析后按照层级结构放入Map

需求:

json解析后按照层级关系把键值放入map,可以用 user.role.name的形式来取得相应的值

支持数组和多层级的关系

public static void analysisJson(Object obj, Map values, String prefix) {

if (obj == null || values == null) {

return;

}

if(prefix == null){

prefix = "";

}

if (obj instanceof JSONArray) {

JSONArray objArray = (JSONArray) obj;

for (int i = 0; i < objArray.size(); i++) {

StringBuilder currentPrefix = new StringBuilder(prefix);

currentPrefix.append("[").append(i).append("].");

analysisJson(objArray.get(i), values, currentPrefix.toString());

}

} else if (obj instanceof JSONObject) {// 如果为json对象

JSONObject jsonObject = (JSONObject) obj;

Iterator it = jsonObject.keySet().iterator();

while (it.hasNext()) {

String key = it.next().toString();

Object object = jsonObject.get(key);

// 如果得到的是数组

if (object instanceof JSONArray) {

JSONArray objArray = (JSONArray) object;

analysisJson(objArray, values, key);

}

// 如果key中是一个json对象

else if (object instanceof JSONObject) {

StringBuilder currentPrefix = new StringBuilder();

if (prefix != null && prefix.length() > 0) {

currentPrefix.append(prefix).append(".").append(key);

} else {

currentPrefix.append(key);

}

currentPrefix.append(".");

analysisJson((JSONObject) object, values, prefix);

}

// 如果key中是其他

else {

values.put(prefix + key, object);

}

}

}

}


版权声明:本文为weixin_42559413原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。