需求:
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);
}
}
}
}