前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >json字符串转为map结构,复杂json字符串转为map结构

json字符串转为map结构,复杂json字符串转为map结构

作者头像
IT云清
发布2019-01-22 10:18:18
7.9K0
发布2019-01-22 10:18:18
举报
文章被收录于专栏:IT云清IT云清

json转map通用方法

开发的时候,经常会遇到json转为Map的需求,简单的json还好处理,如果json比较复杂,转换后为Map嵌套结构,就比较难处理。比如:将下面的json字符串转为Map接口:

代码语言:javascript
复制
{
"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字符串没有问题,嵌套几层都可以。

代码语言:javascript
复制
import net.sf.json.JSONArray;
import net.sf.json.JSONObject
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 = JSONObject.fromObject(jsonStr);
            for (Object k : json.keySet()) {
                Object v = json.get(k);
                //如果内层还是数组的话,继续解析
                if (v instanceof JSONArray) {
                    List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
                    Iterator<JSONObject> 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,结果如下:

代码语言:javascript
复制
{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里,直接就转义了这些双引号,如下:

代码语言:javascript
复制
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";

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

依赖为参考:net.sf.json.JSONObject maven依赖

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年09月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档