大家好,又见面了,我是你们的朋友全栈君。
普通json对象或者字符串转换map或者实体就不说了,这里主要提供复杂json 转map的方法
复杂json例如:String str=”{aaa:test,key:[\”A\”,\”B\”,\”C\”],val:[\”1111\”,\”2222\”,\”333\”]}”,某些key对应的value包含json数组
直接上java代码了:
public class JsonUtils {
/**
*<p>类描述:复杂json字符串转换为Map,包含数组时value为List。</p>
*/
public static Map json2Map(String json) {
LinkedMap map = new LinkedMap();
JSONObject js = JSONObject.fromObject(json);
populate(js, map);
return map;
}
/**
*<p>类描述:json中的键值对解析成map。</p>
*/
private static Map populate(JSONObject jsonObject, Map map) {
for (Iterator iterator = jsonObject.entrySet().iterator(); iterator
.hasNext();) {
String entryStr = String.valueOf(iterator.next());
String key = entryStr.substring(0, entryStr.indexOf("="));
String value = entryStr.substring(entryStr.indexOf("=") + 1,
entryStr.length());
if (jsonObject.get(key).getClass().equals(JSONObject.class)) {
HashMap _map = new HashMap();
map.put(key, _map);
populate(jsonObject.getJSONObject(key), ((Map) (_map)));
} else if (jsonObject.get(key).getClass().equals(JSONArray.class)) {
ArrayList list = new ArrayList();
map.put(key, list);
populateArray(jsonObject.getJSONArray(key), list);
} else {
map.put(key, jsonObject.get(key));
}
}
return map;
}
/**
*<p>类描述:如果是键对应数组,则返回一个list到上级的map里。</p>
*/
private static void populateArray(JSONArray jsonArray, List list) {
for (int i = 0; i < jsonArray.size(); i++)
if (jsonArray.get(i).getClass().equals(JSONArray.class)) {
ArrayList _list = new ArrayList();
list.add(_list);
populateArray(jsonArray.getJSONArray(i), _list);
} else if (jsonArray.get(i).getClass().equals(JSONObject.class)) {
HashMap _map = new HashMap();
list.add(_map);
populate(jsonArray.getJSONObject(i), _map);
} else {
list.add(jsonArray.get(i));
}
}
}
调用如下即可看到效果:
Map map = JsonUtils.json2Map(json.toString());
方法详细解释在这里:http://blog.csdn.net/haqer0825/article/details/9708293
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/149427.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...