java解析json格式

上一篇博客介绍了如何连接第三方http接口,返回json格式的字符串。这边文章续写接下来的解析json字符并入库。
1:由于这个json串稍微复杂一点,先上json格式
{
“dwmc”: “白银小镇(上海)文化产业有限公司”,
“wzfzr”: “陈万天”,
“listIcpGnBaxxWz”: [
{
“wzmc”: “小镇网”,
“listYm”: [
“silver-town.cn”
],
“baxh”: “沪ICP备17001840号-2”,
“listIcpGnBaxxJr”: [
{
“jrsmc”: “上海美橙科技信息发展有限公司”,
“listMc”: [
“福建”,
“重庆”,
“安徽”
]
}
]
},
{
“wzmc”: “白银小镇”,
“listYm”: [
“silverhome.cn”,
“agtown.cn”,
“silverhouse.com.cn”,
“silvertownlet.com”
],
“baxh”: “沪ICP备17001840号-1”,
“listIcpGnBaxxJr”: [
{
“jrsmc”: “上海美橙科技信息发展有限公司”,
“listMc”: [
“福建”,
“重庆”,
“安徽”
]
}
]
}
]
}
在这里插入图片描述

2:注释一下上面的字段
{
“dwmc”: “单位名称”,
“wzfzr”: “网站负责人”,
“listIcpGnBaxxWz”: [
{
“wzmc”: “网站名称”,
“listYm”: [
“域名”
],
“baxh”: “备案号”,
“listIcpGnBaxxJr”: [
{
“jrsmc”: “接入服务商名称”,
“listMc”: [
“接入地”
]
}
]
}
]
}
3:我想要入库的格式,每个域名要对应三个接入地
在这里插入图片描述
4:返回的数据和想要入库的格式都有了,接下来解析json字符串
首先在上一篇文章的基础上导入maven依赖


net.sf.json-lib
json-lib
2.4
jdk15

在这里插入图片描述
5:上解析代码,本文用了定时任务Scheduled,如下
package com.example.service;
import com.example.entity.BeiEntity;
import com.example.mapper.BeiMapper;
import com.example.utils.HttpsUtils;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.jsoup.Connection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Service
public class BeiService {

@Autowired
private BeiMapper beiMapper;

//每个月2号凌晨1点执行,备案数据入库
//@Scheduled(cron="0 0 1 2 * ?")
public void automaticFiling() {
    List<BeiEntity> beiEntityList = new ArrayList<>();
    //获取公司名
    List<Map<String, Object>> name = beiMapper.getName();
    for (int m = 0; m < name.size(); m++) {
        //公司名
        String dwmc = name.get(m).get("COMPANY").toString();
        
        Connection.Response respon = null;
        try {
            respon = HttpsUtils.get("http://第三方ip:8629/BaMicroServiceV2/v1/listIcpShangHaiFatUnit?dwmc=" + dwmc);
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (respon == null) {
            return;
        }
        String body = respon.body();
        if (isJson(body)) {
            //转换为json串
            JSONObject jsonObject = JSONObject.fromObject(body);
            //单位名称
            String dwmcs = jsonObject.get("dwmc").toString();
            //网站负责人
            String wzfzrs = jsonObject.get("wzfzr").toString();
            //由于listIcpGnBaxxWz是一个object对象,所以转换为jsonArray
            Object listIcpGnBaxxWz = jsonObject.get("listIcpGnBaxxWz");
            JSONArray listIcpGnBaxxWzArray = JSONArray.fromObject(listIcpGnBaxxWz);
            BeiEntity beiEntity = null;
            for (int i = 0; i < listIcpGnBaxxWzArray.size(); i++) {
                //网站名称
                String wzmc = listIcpGnBaxxWzArray.getJSONObject(i).get("wzmc").toString();
                //备案号
                String baxh = listIcpGnBaxxWzArray.getJSONObject(i).get("baxh").toString();
                Object listYm = listIcpGnBaxxWzArray.getJSONObject(i).get("listYm");
                JSONArray listYmArray = JSONArray.fromObject(listYm);
                //存放域名list,域名可能有多个
                List<String> ymList = new ArrayList<>();
                for (int j = 0; j < listYmArray.size(); j++) {
                    ymList.add(listYmArray.getString(j));
                }
                //由于listIcpGnBaxxWz里面还有一个obejct对象它listIcpGnBaxxJr,所以再转换成jsonArray
                Object listIcpGnBaxxJr = listIcpGnBaxxWzArray.getJSONObject(i).get("listIcpGnBaxxJr");
                JSONArray listIcpGnBaxxJrArray = JSONArray.fromObject(listIcpGnBaxxJr);
                for (int g = 0; g < listIcpGnBaxxJrArray.size(); g++) {
                    //接入服务商名称
                    String jrsmc = String.valueOf(listIcpGnBaxxJrArray.getJSONObject(g).get("jrsmc"));
                    //接入地listMc
                    Object listMc = listIcpGnBaxxJrArray.getJSONObject(g).get("listMc");
                    JSONArray listMcArray = JSONArray.fromObject(listMc);
                    for (int s = 0; s < listMcArray.size(); s++) {
                        if (ymList != null && ymList.size() > 0) {
                            //遍历上面的域名list(增强for循环,快捷键 ymList.for)
                            for (String ymstr : ymList) {
                                beiEntity = new BeiEntity(dwmc, wzfzrs, wzmc,
                                        ymstr, baxh, jrsmc, String.valueOf(listMcArray.get(s)), new Date());
                                beiEntityList.add(beiEntity);
                            }
                        }
                    }
                }
            }
        }
    }
    beiMapper.insertSelective(beiEntityList);
}

//判断是否为json格式
public static boolean isJson(String body) {
try {
JSONObject.fromObject(body);
return true;
} catch (Exception e) {
return false;
}
}
}
5:每一步解析在注释中已经说明,谢谢观看
Obejct类型的JSON格式串:
Object templateContent = “{respCode=0000, respMsg=成功, result=[{abMessageTemplateNo=sms_10102, abMsgConfigResponseVo=[{id=1, paramCode=name, paramName=投保人姓名, abTemplateNo=sms_10102}, {id=2, paramCode=money, paramName=微车停车券金额, abTemplateNo=sms_10102}, {id=3, paramCode=word, paramName=保障内容, abTemplateNo=sms_10102}, {id=4, paramCode=url, paramName=纯签约页面, abTemplateNo=sms_10102}]}, {abMessageTemplateNo=sms_10106, abMsgConfigResponseVo=[{id=1, paramCode=name, paramName=投保人姓名, abTemplateNo=sms_10106}, {id=2, paramCode=money, paramName=微车停车券金额, abTemplateNo=sms_10106}, {id=3, paramCode=word, paramName=保障内容, abTemplateNo=sms_10106}, {id=5, paramCode=url, paramName=投保页地址, abTemplateNo=sms_10106}]}, {abMessageTemplateNo=sms_10112, abMsgConfigResponseVo=[{id=1, paramCode=name, paramName=投保人姓名, abTemplateNo=sms_10112}, {id=3, paramCode=word, paramName=保障内容, abTemplateNo=sms_10112}, {id=6, paramCode=url, paramName=公众号关注页, abTemplateNo=sms_10112}]}, {abMessageTemplateNo=sms_10103, abMsgConfigResponseVo=[{id=1, paramCode=name, paramName=投保人姓名, abTemplateNo=sms_10103}, {id=2, paramCode=money, paramName=微车停车券金额, abTemplateNo=sms_10103}, {id=3, paramCode=word, paramName=保障内容, abTemplateNo=sms_10103}, {id=6, paramCode=url, paramName=公众号关注页, abTemplateNo=sms_10103}]}, {abMessageTemplateNo=sms_10113, abMsgConfigResponseVo=[{id=4, paramCode=url, paramName=纯签约页面, abTemplateNo=sms_10113}, {id=7, paramCode=productname, paramName=产品名称, abTemplateNo=sms_10113}]}, {abMessageTemplateNo=sms_10114, abMsgConfigResponseVo=[{id=4, paramCode=url, paramName=纯签约页面, abTemplateNo=sms_10114}, {id=7, paramCode=productname, paramName=产品名称, abTemplateNo=sms_10114}]}, {abMessageTemplateNo=sms_10115, abMsgConfigResponseVo=[{id=1, paramCode=name, paramName=投保人姓名, abTemplateNo=sms_10115}, {id=7, paramCode=productname, paramName=产品名称, abTemplateNo=sms_10115}, {id=8, paramCode=issue, paramName=期数, abTemplateNo=sms_10115}, {id=9, paramCode=premium, paramName=保费, abTemplateNo=sms_10115}]}, {abMessageTemplateNo=sms_10116, abMsgConfigResponseVo=[{id=1, paramCode=name, paramName=投保人姓名, abTemplateNo=sms_10116}, {id=7, paramCode=productname, paramName=产品名称, abTemplateNo=sms_10116}, {id=8, paramCode=issue, paramName=期数, abTemplateNo=sms_10116}, {id=9, paramCode=premium, paramName=保费, abTemplateNo=sms_10116}]}, {abMessageTemplateNo=sms_10117, abMsgConfigResponseVo=[{id=1, paramCode=name, paramName=投保人姓名, abTemplateNo=sms_10117}, {id=7, paramCode=productname, paramName=产品名称, abTemplateNo=sms_10117}, {id=8, paramCode=issue, paramName=期数, abTemplateNo=sms_10117}, {id=9, paramCode=premium, paramName=保费, abTemplateNo=sms_10117}, {id=10, paramCode=policyno, paramName=保单号, abTemplateNo=sms_10117}]}, {abMessageTemplateNo=sms_10118, abMsgConfigResponseVo=[{id=1, paramCode=name, paramName=投保人姓名, abTemplateNo=sms_10118}, {id=7, paramCode=productname, paramName=产品名称, abTemplateNo=sms_10118}, {id=8, paramCode=issue, paramName=期数, abTemplateNo=sms_10118}, {id=9, paramCode=premium, paramName=保费, abTemplateNo=sms_10118}]}, {abMessageTemplateNo=sms_10119, abMsgConfigResponseVo=[{id=1, paramCode=name, paramName=投保人姓名, abTemplateNo=sms_10119}, {id=7, paramCode=productname, paramName=产品名称, abTemplateNo=sms_10119}, {id=8, paramCode=issue, paramName=期数, abTemplateNo=sms_10119}, {id=9, paramCode=premium, paramName=保费, abTemplateNo=sms_10119}]}, {abMessageTemplateNo=sms_10120, abMsgConfigResponseVo=[{id=1, paramCode=name, paramName=投保人姓名, abTemplateNo=sms_10120}, {id=4, paramCode=url, paramName=纯签约页面, abTemplateNo=sms_10120}, {id=7, paramCode=productname, paramName=产品名称, abTemplateNo=sms_10120}, {id=8, paramCode=issue, paramName=期数, abTemplateNo=sms_10120}, {id=9, paramCode=premium, paramName=保费, abTemplateNo=sms_10120}]}, {abMessageTemplateNo=sms_10134, abMsgConfigResponseVo=[{id=7, paramCode=productname, paramName=产品名称, abTemplateNo=sms_10134}, {id=10, paramCode=policyno, paramName=保单号, abTemplateNo=sms_10134}]}, {abMessageTemplateNo=sms_10101, abMsgConfigResponseVo=[{id=1, paramCode=name, paramName=投保人姓名, abTemplateNo=sms_10101}, {id=7, paramCode=productname, paramName=产品名称, abTemplateNo=sms_10101}, {id=11, paramCode=insuredate, paramName=出单日期, abTemplateNo=sms_10101}]}, {abMessageTemplateNo=sms_10137, abMsgConfigResponseVo=[{id=1, paramCode=name, paramName=投保人姓名, abTemplateNo=sms_10137}, {id=8, paramCode=issue, paramName=期数, abTemplateNo=sms_10137}, {id=12, paramCode=productname1, paramName=赠险产品名称, abTemplateNo=sms_10137}, {id=13, paramCode=expirydate, paramName=赠险止期, abTemplateNo=sms_10137}, {id=14, paramCode=productname2, paramName=有价险产品名称, abTemplateNo=sms_10137}, {id=15, paramCode=paytime, paramName=有价险出单应交日, abTemplateNo=sms_10137}]}], totalSize=0}”;

转换:

JSONObject fromObject = JSONObject.fromObject(templateContent);
        String result = fromObject.getString("result");
        JSONArray objects = com.alibaba.fastjson.JSONObject.parseArray(result);

    for (int i = 0; i < objects.size(); i++) {
                String templateNo = objects.getJSONObject(i).getString("abMessageTemplateNo");
                String abMsgConfig = objects.getJSONObject(i).getString("abMsgConfigResponseVo");
                if (templateNo.equals(v.getAbTemplateNo())) {
                    JSONArray abMsgConfigJson = JSONArray.parseArray(abMsgConfig);
                    v.setAbMsgConfig(abMsgConfigJson);
                }
            }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值