json字符串转为map结构,复杂json字符串转为map结构
发布日期:2021-06-30 11:04:04 浏览次数:2 分类:技术文章

本文共 4117 字,大约阅读时间需要 13 分钟。

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.16888.com/a/2017/0521/8172148.html",                "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 net.sf.json.JSONArray;import net.sf.json.JSONObjectpublic class Json2Map {    /**     * 将json字符串转为Map结构     * 如果json复杂,结果可能是map嵌套map     * @param jsonStr 入参,json格式字符串     * @return 返回一个map     */    public static Map
json2Map(String jsonStr) { Map
map = new HashMap<>(); if(jsonStr != null && !"".equals(jsonStr)){ //最外层解析 JSONObject json = JSONObject.fromObject(jsonStr); for (Object k : json.keySet()) { Object v = json.get(k); //如果内层还是数组的话,继续解析 if (v instanceof JSONArray) { List
> list = new ArrayList
>(); Iterator
it = ((JSONArray) v).iterator(); while (it.hasNext()) { JSONObject json2 = it.next(); list.add(json2Map(json2.toString())); } map.put(k.toString(), list); } else { map.put(k.toString(), 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.16888.com/a/2017/0521/8172148.html, 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.16888.com/a/2017/0521/8172148.html\",\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";

上面代码直接复制使用就好,不用额外处理。

 

依赖为参考:

 

 

转载地址:https://it4all.blog.csdn.net/article/details/77871115 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:list.remove()时出问题,集合的remove方法注意事项1
下一篇:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月07日 20时23分00秒