json工具类获取json结构下指定的元素

本文介绍了如何在Java中利用JSON工具类高效率地获取JSON结构下的特定元素,包括添加必要的Maven依赖。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package cn.com.laoying.yly.common.utils;

import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.JsonNodeType;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonParser;

import java.util.*;

/**
 * @author 
 * @version 
 * @ClassName CompareJsonUtil.java
 * @Description json对比工具类
 * @createTime 
 */

public class CompareJsonUtil {

    /**
     * 获取json中的所有key及value
     *
     * @param json
     * @return
     * @throws JsonProcessingException
     */
    public static StringBuilder jsonConverToStr(String json) throws JsonProcessingException {
        JsonFactory factory = new JsonFactory();
        ObjectMapper mapper = new ObjectMapper(factory);
        JsonNode rootNode = mapper.readTree(json);
        Iterator<Map.Entry<String, JsonNode>> fieldsIterator = rootNode.fields();
        StringBuilder sbr = new StringBuilder();
        while (fieldsIterator.hasNext()) {
            Map.Entry<String, JsonNode> field = fieldsIterator.next();
//            System.out.println("Key: " + field.getKey()
//                    + "\tValue:" + field.getValue());
            sbr.append(field.getKey() + "-");
            //TODO:yly2.0版本暂时递归到所有object中的key,不考虑ARRAY场景
            if (field.getValue().getNodeType().equals(JsonNodeType.OBJECT)) {
                sbr.append(jsonConverToStr(field.getValue().toString()));
            }
        }
        return sbr;
    }

    public static List<String> getJsonKey(String json) throws JsonProcessingException {
        JsonFactory factory = new JsonFactory();

        ObjectMapper mapper = new ObjectMapper(factory);
        JsonNode rootNode = mapper.readTree(json);
        Iterator<Map.Entry<String, JsonNode>> fieldsIterator = rootNode.fields();
        List<String> list = new ArrayList<>();
        while (fieldsIterator.hasNext()) {
            Map.Entry<String, JsonNode> field = fieldsIterator.next();
            list.add(field.getKey());
            //TODO:yly2.0版本暂时递归到所有object中的key,不考虑ARRAY场景
            if (field.getValue().getNodeType().equals(JsonNodeType.OBJECT)) {
                list.addAll(getJsonKey(field.getValue().toString()));
            }
        }
        return list;
    }

    /**
     * yly2.0版本暂时递归到所有object中的字段类型,包括ARRAY场景
     * 获取json中的所有key及value,转为map
     *
     * @param json
     * @return
     * @throws JsonProcessingException
     */
    public static Map<String, Object> jsonConverToMap(String json) throws JsonProcessingException {
        JsonFactory factory = new JsonFactory();
        Map<String, Object> jsonStructMap = new HashMap<>(16);
        ObjectMapper mapper = new ObjectMapper(factory);
        JsonNode rootNode = mapper.readTree(json);
        Iterator<Map.Entry<String, JsonNode>> fieldsIterator = rootNode.fields();

        while (fieldsIterator.hasNext()) {
            Map.Entry<String, JsonNode> field = fieldsIterator.next();
            //key对应值
            jsonStructMap.put(field.getKey(), field.getValue());
            System.out.println("-----------:{}------"+field.getValue().getNodeType());
            if (field.getValue().getNodeType().equals(JsonNodeType.OBJECT)) {
                Map<String, Object> jsonStructMap2 = jsonConverToMap(field.getValue().toString());
                jsonStructMap.putAll(jsonStructMap2);
            }
            if (field.getValue().getNodeType().equals(JsonNodeType.ARRAY)) {
                JsonArray jsonArray = JsonParser.parseString(field.getValue().toString()).getAsJsonArray();
                Map<String, Object> jsonStructMap3= jsonConverToMap(jsonArray.get(0).getAsString());
                jsonStructMap.putAll(jsonStructMap3);
            }
        }
        return jsonStructMap;
    }


    /**
     * 将json结构体中的所有key进行对比
     *
     * @param newJsonStr
     * @param oldJsonStr
     * @return
     */
    public static Boolean campareJsonByKeys(String newJsonStr, String oldJsonStr) throws JsonProcessingException {
        return jsonConverToStr(newJsonStr).toString().equals(jsonConverToStr(oldJsonStr).toString());
    }

    public static void main(String[] args) throws JsonProcessingException {
        String str = "{\"PtVersion\":\"LY-1.10\",\"MainType\":\"work\",\"InstModel\":\"ly3023y\",\"InstID\":\"2B04030488\",\"Date\":\"2021-07-16\",\"Time\":\"09:42:04\",\"DevState\":\"3\",\"SwVer\":\"V5.50-0511+V6.00-0511\",\"TaskStyle\":\"gas\",\"TaskID\":21071609420002,\"MsgSerial\":13,\"StepID\":\"gasm\",\"StepOp\":\"upload_end\",\"object\":{\"MSt\":\"2021-07-16 09:41:04\",\"MEt\":\"2021-07-16 09:42:03\",\"FN1Single\":4,\"Qs\":0,\"Qsnd\":0,\"Pd\":0,\"Ps\":0.00,\"Pt\":0.00,\"Vs\":0.00,\"Ts\":0.0,\"F\":0.000,\"Ba\":0.00,\"GkXsw\":0.00,\"Kp\":0.840,\"EqurCoef\":1.80,\"KLoad\":1.00,\"KExcess\":99.99,\"SO2_D\":0.0,\"SO2_W\":0.0,\"SO2_C\":0.0,\"SO2_E\":0.00,\"NO_D\":0.0,\"NO_W\":0.0,\"NO_C\":0.0,\"NO_E\":0.00,\"NO2_D\":0.0,\"NO2_W\":0.0,\"NO2_C\":0.0,\"NO2_E\":0.00,\"NOX_D\":0.0,\"NOX_W\":0.0,\"NOX_C\":0.0,\"NOX_E\":0.00,\"O2\":20.81,\"CO\":3.29,\"CO_C\":183.0,\"CO_E\":0.00,\"Qg\":0.50,\"YqXsw\":6.00}}";
        String str1 = "{\"PtVersion\":\"LY-1.00\",\"MainType\":\"work\",\"InstModel\":\"ly2029\",\"InstID\":\"2B20211005\",\"Date\":\"2021-11-09\",\"Time\":\"08:46:49\",\"DevState\":\"3\",\"SwVer\":\"V0.00-0000+V1.08-0568\",\"TaskStyle\":\"gas\",\"TaskID\":21110908460001,\"MsgSerial\":2,\"StepID\":\"gasm\",\"StepOp\":\"upload_int\",\"object\":{\"SO2\":0.0,\"NO\":0.0,\"NO2\":0.0,\"NH3\":0.0,\"C6H6\":0.0,\"C6H5CH3\":0.0,\"Qg\":0.0,\"Temp\":0.0,\"Xsw\":0.0,\"Ba\":101.99}}";
        String str2 = "{\"PtVersion\":\"LY-1.00\",\"MainType\":\"work\",\"InstModel\":\"ly2029\",\"InstID\":\"2B20211005\",\"Date\":\"2021-11-09\",\"Time\":\"08:46:49\",\"DevState\":\"3\",\"SwVer\":\"V0.00-0000+V1.08-0568\",\"TaskStyle\":\"gas\",\"TaskID\":21110908460001,\"MsgSerial\":2,\"StepID\":\"gasm\",\"StepOp\":\"upload_int\",\"object\":{\"SO2\":0.0,\"NO\":0.0,\"NO2\":0.0,\"NH3\":0.0,\"C6H6\":0.0,\"C6H5CH3\":0.0,\"Qg\":0.0,\"Temp\":0.0,\"Xsw\":0.0,\"Ba\":101.99}}";
        jsonConverToMap(str);
        //        System.out.println( "---两个json中所有key是否一致:"+campareJson(str,str1));
//        System.out.println("所有key最终值:" + jsonConverToStr(str));
//        System.out.println("所有key最终值:" + jsonConverToStr(str1));
//        System.out.println("JSON-通过key对比是否相同:" + campareJsonByKeys(str1, str2));
//        System.out.println("jsonMap最终值:" + jsonConverToMap(str));
//        System.out.println("jsonMap最终值:" + jsonConverToMap(str1));
//        System.out.println("---两个json结构体转为map,判断map是否一致:"
//                + CompareMapUtil.compareMap(jsonConverToMap(str), jsonConverToMap(str1)));
    }
}

添加maven依赖

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>${gson.version}</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <!--            <version>2.13.1</version>-->
</dependency>

效率比较高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值