Java解析复杂JSON

1.pom配置

      <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20190722</version>
        </dependency>

在这里插入图片描述

2.解析步骤

(1)解析的json数据

 {
 "batteryAlarm": 0,
 "carMode": 1,
 "minVoltageBattery": 3.89,
 "chargeStatus": 1,
 "vin": "LS5A3CJC0JF890971",
 "nevChargeSystemTemperatureDtoList": [{
        "probeTemperatures": [25, 23, 24, 21, 24, 21, 23, 21, 23, 21, 24, 21, 24, 21, 25, 21],
        "chargeTemperatureProbeNum": 16,
        "childSystemNum ": 1
 }]
 }

(2)解析思路

      
   实现步骤:
         ①:创建json字符串;
         ②:创建java类;
         ③:使用org.json解析json字符串;
         ④:将json的字符串解析后为key:value,赋值给javaBean;
         ⑤:打印测试.
  

在这里插入图片描述

3.代码实现

3.1 Java Bean的实体类

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
 * @Author Lzy
 * @Date 2023-05-28 23:46
 * @Version 1.0
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class jsonEntity {
    private int batteryAlarm;
    private int carMode;
    private Double minVoltageBattery;
    private int chargeStatus;
    private String vin;
    private List<Integer> probeTemperatures;
    private int chargeTemperatureProbeNum;
    private int childSystemNum;
}

3.2 解析JSON代码

/**
 * @Author Lzy
 * @Date 2023-05-28 23:46
 * @Version 1.0
 */

import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.*;

/**
 {
 "batteryAlarm": 0,
 "carMode": 1,
 "minVoltageBattery": 3.89,
 "chargeStatus": 1,
 "vin": "LS5A3CJC0JF890971",
 "nevChargeSystemTemperatureDtoList": [{

     "probeTemperatures": [25, 23, 24, 21, 24, 21, 23, 21, 23, 21, 24, 21, 24, 21, 25, 21],
     "chargeTemperatureProbeNum": 16,
     "childSystemNum ": 1
 }]
 }
 */
public class complexJson {
    public static void main(String[] args) {
        /**
         * 实现步骤:
         * ①:创建json字符串
         * ②:创建java类
         * ③:使用org。json解析json字符串
         * ④:将json的字符串解析后为key:value,赋值给javaBean
         * ⑤:打印测试
         *
         */
        // todo ①:创建json字符串
        String jsonStr = "{\"" +
                "batteryAlarm\": 0,\"" +
                "carMode\": 1,\"" +
                "minVoltageBattery\": 3.89,\"" +
                "chargeStatus\": 1,\"" +
                "vin\": \"LS5A3CJC0JF890971\",\"" +
                "nevChargeSystemTemperatureDtoList\":[" +
                "{\"probeTemperatures\": [25, 23, 24, 21, 24, 21, 23, 21, 23, 21, 24, 21, 24, 21, 25, 21],\"" +
                "chargeTemperatureProbeNum\": 16," +
                "\"childSystemNum\": 1}" +
                "]" +
                "}";
        // todo ②:创建java类
        jsonEntity jsonEntity=null;

        // todo ③:使用org。json解析json字符串
        JSONObject jsonObject = new JSONObject(jsonStr);

        // todo ④:将json的字符串解析后为key:value,赋值给javaBean
        HashMap<String, Object> stringObjectHashMap = jsonToHashMap(jsonObject);
        int batteryAlarm =Integer.parseInt(stringObjectHashMap.getOrDefault("batteryAlarm", -999999).toString());
        int carMode =Integer.parseInt(stringObjectHashMap.getOrDefault("carMode", -999999).toString());
        double minVoltageBattery =Double.parseDouble(stringObjectHashMap.getOrDefault("minVoltageBattery",-999999D).toString());

        int chargeStatus =Integer.parseInt(stringObjectHashMap.getOrDefault("chargeStatus", -999999).toString());
        String vin =stringObjectHashMap.getOrDefault("vin", -999999).toString();
       final String nevChargeSystemTemperatureDtoListStr = stringObjectHashMap.getOrDefault("nevChargeSystemTemperatureDtoList", null).toString();

        final List<HashMap<String, Object>> nevChargeSystemTemperatureDtoList = jsonToList(nevChargeSystemTemperatureDtoListStr);
        final HashMap<String, Object> firstHashMap = nevChargeSystemTemperatureDtoList.get(0);
        int chargeTemperatureProbeNum = Integer.parseInt(firstHashMap.getOrDefault("chargeTemperatureProbeNum", -999999).toString());
        int childSystemNum = Integer.parseInt(firstHashMap.getOrDefault("childSystemNum", -999999).toString());

        ArrayList<Integer> probeTemperatures = new ArrayList<>();
        final String temperatures =firstHashMap.getOrDefault("probeTemperatures", -999999).toString();
        //不为空时执行
        if(StringUtils.isNotEmpty(temperatures)){
          // [25, 23, 24, 21, 24, 21, 23, 21, 23, 21, 24, 21, 24, 21, 25, 21]
            final JSONArray jsonArray = new JSONArray(temperatures);
            for (Object obj : jsonArray) {
                probeTemperatures.add(Integer.parseInt(obj.toString()));
            }
        }

        // todo ⑤:打印测试
         jsonEntity = new jsonEntity(
                batteryAlarm,
                carMode,
                minVoltageBattery,
                chargeStatus,
                vin,
                probeTemperatures,
                chargeTemperatureProbeNum,
                childSystemNum

        );
        System.out.println(jsonEntity);
    }

    /**
     * 将json字符串转换成集合对象
     * @param jsonStr
     * @return
     */
    private static List<HashMap<String,Object>> jsonToList(String jsonStr) {
        //定义返回的集合对象
        List<HashMap<String,Object>> list = new ArrayList<>();

        //将json字符串转换成jsonArray
        JSONArray jsonArray = new JSONArray(jsonStr);
        //遍历集合中的每一个元素
        for (Object obj : jsonArray) {
           final  String objStr = obj.toString();
           final JSONObject jsonObject=new JSONObject(objStr);
           list.add(jsonToHashMap(jsonObject));
        }
        //返回解析后的list集合
        return list;
    }

    /**
     * 将jsonObject对象转换成hashMap(将kv键值对的json解析后写入到map中)
     * @param jsonObject
     * @return
     */
    private static HashMap<String,Object> jsonToHashMap(JSONObject jsonObject) {
        //定义需要返回的hashMap对象
        HashMap<String,Object> kv = new HashMap<>();
        //获取到jsonObject对象的所有key
        /**
         * kv.put(1, "Google");
         * kv.put(2, "Runoob");
         * kv.put(3, "Taobao");
         *       ||
         *       ||输出结果
         *  keySet: [1, 2, 3]
         */
        final Set<String> keySet = jsonObject.keySet();
        //遍历集合,将每一个key对应的value查询出来写入到hashMap对象
        for (String key : keySet) {
            kv.put(key,jsonObject.get(key));
        }
        //返回hashMap对象、
        return kv;
    }
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别这么骄傲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值