前言:该笔记转载自https://blog.csdn.net/u010999809/article/details/80727640,不过所用的jar包和原作者不一样。需要
注意这些点:1、json字符串最外层是key-value类型,2、json字符串里的value不能是普通类型的数组,比如[val1,val2,val3...],
数组,里面的元素必须是key-value形式的。
maven依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.59</version>
</dependency>
贴代码
public static Map<String, Object> parseJSON2Map(JSONObject json) {
Map<String, Object> map = new HashMap<String, Object>();
// 最外层解析
for (Object k : json.keySet()) {
Object v = json.get(k);
// 如果内层还是json数组的话,继续解析
if (v instanceof JSONArray) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Iterator<Object> it = ((JSONArray) v).iterator(); //迭代器不用考虑长度为0的情况
while (it.hasNext()) {
JSONObject json2 = (JSONObject) it.next();
list.add(parseJSON2Map(json2));
}
map.put(k.toString(), list);
} else if (v instanceof JSONObject) {
// 如果内层是json对象的话,继续解析
map.put(k.toString(), parseJSON2Map((JSONObject) v));
} else {
// 如果内层是普通对象的话,直接放入map中
map.put(k.toString(), v);
}
}
return map;
}
测试:
String str="";
str="{" +
"\"data\": {" +
"\"studentList\": [{" +
"\"scourse\": {" +
"\"cname\": \"语文,数学,英语\"," +
"\"cscore\": \"93,95,98\"" +
"}," +
"\"sname\": \"张三\"," +
"\"sage\": \"20\"," +
"\"sid\": \"101\"" +
"}," +
"{" +
"\"scourse\": {" +
"\"cname\": \"物理,化学,生物\"," +
"\"cscore\": \"92,93,97\"" +
"}," +
"\"sname\": \"李四\"," +
"\"sage\": \"30\"," +
"\"sid\": \"102\"" +
"}]" +
"}," +
"\"resultCode\": \"1\"" +
"}";
Map<String, Object> map = parseJSON2Map(JSONObject.parseObject(str));
System.out.println(map);
输出结果:
{data={studentList=[{scourse={cname=语文,数学,英语, cscore=93,95,98}, sname=张三, sage=20, sid=101}, {scourse={cname=物理,化学,生物, cscore=92,93,97}, sname=李四, sage=30, sid=102}]}, resultCode=1}