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

本文介绍了一种递归方法,用于解析复杂JSON结构,并将其转换为易于访问的Map形式。支持多级嵌套及数组,方便获取如user.role.name等深层路径的数据。

需求:

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

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值