fastJson解析三层嵌套字符串20200808

博客内容涉及使用FastJson库解析包含三层嵌套结构的JSON字符串,通过提供具体的JsonTest入口类和PolicyInfo实体类的示例进行说明。

解析复杂嵌套的json报文,三层list嵌套,报文示例如下:

{
    "returnCode": "000",
    "returnMsg": "查询成功有数据",
    "policyInfo": [
        {
            "insuranceInfo": [
                {
                    "insuranceId": "第二层list元素1",
                    "paymentInfo": [
                        {
                            "name": "第三层list元素1"
                        }
                    ],
                    "AdvanceInfo": []
                }
            ],
            "policyId": "第一层list元素1"
        },
        {
            "insuranceInfo": [],
            "policyId": "第一层list元素2"
        }
    ]
}

JsonTest入口类:

package com.demo;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class JsonTest {
    public static void main(String[] args) {
        JsonTest test = new JsonTest();
        Map<String,Object> resultMap = new HashMap<>(4);
        resultMap.put("returnCode", "000");
        resultMap.put("returnMsg","查询成功有数据");

        List<Map<String,Object>> policyInfo = new ArrayList<>();
        Map<String,Object> ele1 = new HashMap<>();
        ele1.put("policyId","第一层list元素1");

        List<Map<String,Object>> insuranceInfo = new ArrayList<>();
        Map<String,Object> ele11 = new HashMap<>();
        ele11.put("insuranceId","第二层list元素1");

        List<Map<String,Object>> paymentInfo = new ArrayList<>();
        Map<String,Object> ele111 = new HashMap<>();
        ele111.put("name","第三层list元素1");
        paymentInfo.add(ele111);

        ele11.put("paymentInfo",paymentInfo);
        ele11.put("AdvanceInfo",new ArrayList<Map>());
        insuranceInfo.add(ele11);

        ele1.put("insuranceInfo",insuranceInfo);
        policyInfo.add(ele1);
        Map<String,Object> ele2 = new HashMap<>();
        ele2.put("policyId","第一层list元素2");
        ele2.put("insuranceInfo",new ArrayList<>());
        policyInfo.add(ele2);
        resultMap.put("policyInfo",policyInfo);

        System.out.println(resultMap);

        String jsonStr = JSON.toJSONString(resultMap);

        System.out.println(jsonStr);

        Map<String,Object> map = test.jsonStrParse(jsonStr);

        System.out.println(map);

    }

    private Map<String,Object> jsonStrParse(String jsonStr){
        Map<String,Object> resultMap = new HashMap<>();
        JSONObject jsonObject = JSON.parseObject(jsonStr);
        String policyInfo = jsonObject.getString("policyInfo");
        List<PolicyInfo> list = JSON.parseArray(policyInfo, PolicyInfo.class);
        resultMap.put("policyInfo",list);//可在当前行打断点查询list结构
        return resultMap;

    }
}

构造的实体类PolicyInfo:

package com.demo;

import java.util.List;
import java.util.Map;

public class PolicyInfo {

    private String policyId;
    private List<insuranceInfo> insuranceInfo;

    public String getPolicyId() {
        return policyId;
    }

    public void setPolicyId(String policyId) {
        this.policyId = policyId;
    }

    public List<PolicyInfo.insuranceInfo> getInsuranceInfo() {
        return insuranceInfo;
    }

    public void setInsuranceInfo(List<PolicyInfo.insuranceInfo> insuranceInfo) {
        this.insuranceInfo = insuranceInfo;
    }

    class insuranceInfo {
        private String insuranceId;
        private List<Map<String, Object>> paymentInfo;
        private List<Map<String, Object>> advanceInfo;

        public String getInsuranceId() {
            return insuranceId;
        }

        public void setInsuranceId(String insuranceId) {
            this.insuranceId = insuranceId;
        }

        public List<Map<String, Object>> getPaymentInfo() {
            return paymentInfo;
        }

        public void setPaymentInfo(List<Map<String, Object>> paymentInfo) {
            this.paymentInfo = paymentInfo;
        }

        public List<Map<String, Object>> getAdvanceInfo() {
            return advanceInfo;
        }

        public void setAdvanceInfo(List<Map<String, Object>> advanceInfo) {
            this.advanceInfo = advanceInfo;
        }
    }
}

控制台输出结果:

"C:\Program Files\Java\jdk1.8.0_151\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2018.2\lib\idea_rt.jar=3176:C:\Program Files\JetBrains\IntelliJ IDEA 2018.2\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_151\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\rt.jar;D:\workspace\MavenDemo\target\classes;D:\repository\com\alibaba\fastjson\1.2.7\fastjson-1.2.7.jar" com.demo.JsonTest
{returnCode=000, returnMsg=查询成功有数据, policyInfo=[{insuranceInfo=[{insuranceId=第二层list元素1, paymentInfo=[{name=第三层list元素1}], AdvanceInfo=[]}], policyId=第一层list元素1}, {insuranceInfo=[], policyId=第一层list元素2}]}
{"returnCode":"000","returnMsg":"查询成功有数据","policyInfo":[{"insuranceInfo":[{"insuranceId":"第二层list元素1","paymentInfo":[{"name":"第三层list元素1"}],"AdvanceInfo":[]}],"policyId":"第一层list元素1"},{"insuranceInfo":[],"policyId":"第一层list元素2"}]}
[com.demo.PolicyInfo@2aae9190, com.demo.PolicyInfo@2f333739]
{policyInfo=[com.demo.PolicyInfo@2aae9190, com.demo.PolicyInfo@2f333739]}

Process finished with exit code 0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值