解析复杂嵌套的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