json转map通用方法
开发的时候,经常会遇到json转为Map的需求,简单的json还好处理,如果json比较复杂,转换后为Map嵌套结构,就比较难处理。比如:将下面的json字符串转为Map接口:
{
"data": [
{
"IR_SRCNAME": "车主之家",
"IR_SITENAME": "车主之家",
"IR_AUTHORS": null,
"IR_URLTITLE": "2017年4月份高尔夫销量11798台, 同比下降20.24%",
"IR_URLNAME": "http://news./a/2017/0521/",
"IR_ABSTRACT": " 2017年4月份高尔夫销量11798台 ",
"IR_URLTIME": "2017/05/21 23:35:00",
"IR_HKEYBBSNUM": "18093721078864168420-0",
"IR_CHANNEL": "新闻_汽车新闻",
"COMPANY_RISK_CONN": "汽车之家股份有限公司_财务风险\偿债能力\营运资本_18;",
"ZFM": "负面"
}
],
"path": "/cloud/wsu/queryByKeyword!get_by_fullname.action",
"rstcode": "0000",
"rstcount": 19476,
"cmpname": "汽车之家股份有限公司",
"shortname": "汽车之家",
"rstmsg": "查询成功"
}
看完发现,这个json字符串转为map后,应该是Map嵌套Map结构的。怎么办呢?
这里提供一方法,可以当作工具类,只要json字符串没有问题,嵌套几层都可以。
import ;
import
public class Json2Map {
/**
* 将json字符串转为Map结构
* 如果json复杂,结果可能是map嵌套map
* @param jsonStr 入参,json格式字符串
* @return 返回一个map
*/
public static Map<String, Object> json2Map(String jsonStr) {
Map<String, Object> map = new HashMap<>();
if(jsonStr != null && !"".equals(jsonStr)){
//最外层解析
JSONObject json = (jsonStr);
for (Object k : ()) {
Object v = (k);
//如果内层还是数组的话,继续解析
if (v instanceof JSONArray) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Iterator<JSONObject> it = ((JSONArray) v).iterator();
while (()) {
JSONObject json2 = ();
(json2Map(()));
}
((), list);
} else {
((), v);
}
}
return map;
}else{
return null;
}
}
}
用上面这个方法处理完后,打印这个map,结果如下:
{rstcount=19476, path=/cloud/wsu/queryByKeyword!get_by_fullname.action,
data=[{ZFM=负面, COMPANY_RISK_CONN=汽车之家股份有限公司_财务风险偿债能力营运资本_18;, IR_URLTIME=2017/05/21 23:35:00, IR_URLTITLE=2017年4月份高尔夫销量11798台, 同比下降20.24%, IR_SRCNAME=车主之家, IR_SITENAME=车主之家, IR_URLNAME=http://news./a/2017/0521/, IR_ABSTRACT= 2017年4月份高尔夫销量11798台 , IR_HKEYBBSNUM=18093721078864168420-0, IR_AUTHORS=null, IR_CHANNEL=新闻_汽车新闻}],
rstcode=0000,
cmpname=汽车之家股份有限公司,
shortname=汽车之家,
rstmsg=查询成功}
可以看到结果是一个Map嵌套一个Map。可以把这个方法存起来,遇到json转Map时,直接使用就好了。
注意:这里的json字符串中很多双引号,用eclipse开发,可能会涉及转义问题,但是idea就不用,把这个json传扔到idea里,直接就转义了这些双引号,如下:
String jsonp = "{\n" +
"\"data\": [\n" +
" {\n" +
" \"IR_SRCNAME\": \"车主之家\",\n" +
" \"IR_SITENAME\": \"车主之家\",\n" +
" \"IR_AUTHORS\": null,\n" +
" \"IR_URLTITLE\": \"2017年4月份高尔夫销量11798台, 同比下降20.24%\",\n" +
" \"IR_URLNAME\": \"http://news./a/2017/0521/\",\n" +
" \"IR_ABSTRACT\": \" 2017年4月份高尔夫销量11798台 \",\n" +
" \"IR_URLTIME\": \"2017/05/21 23:35:00\",\n" +
" \"IR_HKEYBBSNUM\": \"18093721078864168420-0\",\n" +
" \"IR_CHANNEL\": \"新闻_汽车新闻\", \n" +
" \"COMPANY_RISK_CONN\": \"汽车之家股份有限公司_财务风险\\偿债能力\\营运资本_18;\",\n" +
" \"ZFM\": \"负面\"\n" +
" }\n" +
" ],\n" +
" \"path\": \"/cloud/wsu/queryByKeyword!get_by_fullname.action\",\n" +
" \"rstcode\": \"0000\",\n" +
" \"rstcount\": 19476,\n" +
" \"cmpname\": \"汽车之家股份有限公司\",\n" +
" \"shortname\": \"汽车之家\",\n" +
" \"rstmsg\": \"查询成功\"\n" +
" }\n";
上面代码直接复制使用就好,不用额外处理。
依赖为参考: maven依赖