打印 JSON 路径

Java常用方法   2025-01-11 06:11   140   0  

一、pom 依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.chenwc</groupId>
    <artifactId>AnalysisJson</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <slf4j.version>2.0.5</slf4j.version>
        <log4j.version>1.2.17</log4j.version>
        <maven.compiler.plugin.version>3.6.1</maven.compiler.plugin.version>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.83</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.12.0</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-reload4j</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.plugin.version}</version>
            </plugin>
        </plugins>
    </build>

</project>

二、log4j.properties

log4j.rootLogger=info,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %-5p %-5L --- [%-5t] %-10c : %m %n

三、代码

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author chenwc
 * @date 2023/11/13 20:48
 */
public class AnalysisJson {

    private static final Logger log = LoggerFactory.getLogger(AnalysisJson.class);

    public static void main(String[] args) {
        // TODO 自动生成的方法存根

        JSONObject jsonObject = JSONObject.parseObject("{\"batchId\":\"1260219663439168\",\"items\":[{\"GYSC\":[],\"YHXX\":[],\"KPXX\":[{\"INVOICE_NUM\":\"2121\",\"CUSBUKRS\":\"0150\",\"POST_ACCOUNT_CUS\":\"\",\"INVOICE_NAME\":\"浙江东廷物产集团有限公司01\",\"CUSBUKRS_FLAG\":\"\",\"INVOICE_ADDR\":\"\",\"INVOICE_TEL\":\"\",\"CUS_TYPE\":\"贸易商\",\"INVOICE_BANK\":\"2121\",\"NAME\":\"浙江东廷物产集团有限公司\"},{\"INVOICE_NUM\":\"41241\",\"CUSBUKRS\":\"0150\",\"POST_ACCOUNT_CUS\":\"\",\"INVOICE_NAME\":\"浙江东廷物产集团有限公司02\",\"CUSBUKRS_FLAG\":\"\",\"INVOICE_ADDR\":\"\",\"INVOICE_TEL\":\"\",\"CUS_TYPE\":\"贸易商\",\"INVOICE_BANK\":\"1241\",\"NAME\":\"浙江东廷物产集团有限公司\"},{\"INVOICE_NUM\":\"12421\",\"CUSBUKRS\":\"无\",\"POST_ACCOUNT_CUS\":\"\",\"INVOICE_NAME\":\"浙江东廷物产集团有限公司2-22\",\"CUSBUKRS_FLAG\":\"\",\"INVOICE_ADDR\":\"\",\"INVOICE_TEL\":\"\",\"CUS_TYPE\":\"贸易商\",\"INVOICE_BANK\":\"321412\",\"NAME\":\"浙江东廷物产集团有限公司\"},{\"INVOICE_NUM\":\"423423\",\"CUSBUKRS\":\"无\",\"POST_ACCOUNT_CUS\":\"\",\"INVOICE_NAME\":\"浙江东廷物产集团有限公司2-23\",\"CUSBUKRS_FLAG\":\"\",\"INVOICE_ADDR\":\"\",\"INVOICE_TEL\":\"\",\"CUS_TYPE\":\"贸易商\",\"INVOICE_BANK\":\"4343243\",\"NAME\":\"浙江东廷物产集团有限公司\"}],\"KHC\":[],\"BP\":{\"TAXPAYER\":\"\",\"TXTLG\":\"浙江东廷物产集团有限公司\",\"PARTNER_ORGTYPE\":\"1\",\"COM_PROV\":\"330000\",\"BP_ID_CODE\":\"\",\"COM_AREA\":\"\",\"COUNTRY\":\"CN\",\"BP_SOCIAL_NUM\":\"\",\"BU_GROUP\":\"Z002\",\"BP_INDSCT\":\"F5135\",\"EMPNO\":\"\",\"COM_TYPE\":\"有限责任公司(自然人投资或控股)\",\"ZNAME_EN\":\"\",\"COM_TEL\":\"\",\"TRADE_TYPE\":\"1,2\",\"TXTSH\":\"\",\"BP_ID_CARD\":\"\",\"CODE\":\"1003000361\",\"COM_STATUS\":\"1\",\"ZFDDBR\":\"施政平\",\"COM_CITY\":\"\",\"FOUND_DAT\":\"2017-04-17\",\"LASTUPDATEDTIME\":\"2023-11-15 17:44:34\",\"VERSION\":4,\"PARTNER_TYPE\":\"\",\"STRAS\":\"浙江省杭州市上城区财富金融中心2幢3504室\",\"BP_ID_NUM\":\"91330104MA28NWF65N\"}}]}");
        try {
            JSONObject recvJsonObject = new JSONObject(true);
            recursionJsonObject("", jsonObject, recvJsonObject);
            log.info("转换后的 JSON 对象: {}", recvJsonObject.toJSONString());
            for (String key : recvJsonObject.keySet()) {
                log.info("路径: {},值: {}", key, recvJsonObject.getString(key));
            }
        } catch (Exception e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
    }

    /**
     * 递归json对象
     *
     * @param path json路径
     * @param json 待打印路径的json对象
     * @param recv 接收json路径的json对象
     */
    public static void recursionJsonObject(String path, JSONObject json, JSONObject recv) throws Exception {
        for (String key : json.keySet()) {
            Object object = json.get(key);
            // JSON对象
            if (object instanceof JSONObject) {
                String newPath;
                if (StringUtils.isNotEmpty(path)) {
                    newPath = path + "." + key;
                } else {
                    newPath = key;
                }
                recursionJsonObject(newPath, (JSONObject) object, recv);
            }
            // JSON数组
            else if (object instanceof JSONArray) {
                String newPath;
                if (StringUtils.isNotEmpty(path)) {
                    newPath = path + "." + key;
                } else {
                    newPath = key;
                }
                JSONArray jsonArray = json.getJSONArray(key);
                if (null != jsonArray && jsonArray.size() > 0) {
                    recursionJsonArray(newPath, json.getJSONArray(key), recv);
                } else {
                    if (StringUtils.isEmpty(path)) {
                        recv.put(key, object);
                    } else {
                        recv.put(path + "." + key, object);
                    }
                }
            }
            // 值
            else {
                if (StringUtils.isEmpty(path)) {
                    recv.put(key, object);
                } else {
                    recv.put(path + "." + key, object);
                }
            }
        }
    }

    /**
     * 递归json数组
     *
     * @param path      json路径
     * @param jsonArray json数组
     * @param recv      接收json路径的json对象
     */
    public static void recursionJsonArray(String path, JSONArray jsonArray, JSONObject recv) throws Exception {
        int i = 0;
        for (Object object : jsonArray) {
            // JSON对象
            if (object instanceof JSONObject) {
                recursionJsonObject(path + "[" + i + "]", (JSONObject) object, recv);
            }
            // JSON数组
            else if (object instanceof JSONArray) {
                recursionJsonArray(path + "[" + i + "]", (JSONArray) object, recv);
            }
            i++;
        }
    }

}

输入:

{"batchId":"1260219663439168","items":[{"GYSC":[],"YHXX":[],"KPXX":[{"INVOICE_NUM":"2121","CUSBUKRS":"0150","POST_ACCOUNT_CUS":"","INVOICE_NAME":"浙江东廷物产集团有限公司01","CUSBUKRS_FLAG":"","INVOICE_ADDR":"","INVOICE_TEL":"","CUS_TYPE":"贸易商","INVOICE_BANK":"2121","NAME":"浙江东廷物产集团有限公司"},{"INVOICE_NUM":"41241","CUSBUKRS":"0150","POST_ACCOUNT_CUS":"","INVOICE_NAME":"浙江东廷物产集团有限公司02","CUSBUKRS_FLAG":"","INVOICE_ADDR":"","INVOICE_TEL":"","CUS_TYPE":"贸易商","INVOICE_BANK":"1241","NAME":"浙江东廷物产集团有限公司"},{"INVOICE_NUM":"12421","CUSBUKRS":"无","POST_ACCOUNT_CUS":"","INVOICE_NAME":"浙江东廷物产集团有限公司2-22","CUSBUKRS_FLAG":"","INVOICE_ADDR":"","INVOICE_TEL":"","CUS_TYPE":"贸易商","INVOICE_BANK":"321412","NAME":"浙江东廷物产集团有限公司"},{"INVOICE_NUM":"423423","CUSBUKRS":"无","POST_ACCOUNT_CUS":"","INVOICE_NAME":"浙江东廷物产集团有限公司2-23","CUSBUKRS_FLAG":"","INVOICE_ADDR":"","INVOICE_TEL":"","CUS_TYPE":"贸易商","INVOICE_BANK":"4343243","NAME":"浙江东廷物产集团有限公司"}],"KHC":[],"BP":{"TAXPAYER":"","TXTLG":"浙江东廷物产集团有限公司","PARTNER_ORGTYPE":"1","COM_PROV":"330000","BP_ID_CODE":"","COM_AREA":"","COUNTRY":"CN","BP_SOCIAL_NUM":"","BU_GROUP":"Z002","BP_INDSCT":"F5135","EMPNO":"","COM_TYPE":"有限责任公司(自然人投资或控股)","ZNAME_EN":"","COM_TEL":"","TRADE_TYPE":"1,2","TXTSH":"","BP_ID_CARD":"","CODE":"1003000361","COM_STATUS":"1","ZFDDBR":"施政平","COM_CITY":"","FOUND_DAT":"2017-04-17","LASTUPDATEDTIME":"2023-11-15 17:44:34","VERSION":4,"PARTNER_TYPE":"","STRAS":"浙江省杭州市上城区财富金融中心2幢3504室","BP_ID_NUM":"91330104MA28NWF65N"}}]}

image.png
输出:

{"batchId":"1260219663439168","items[0].GYSC":[],"items[0].YHXX":[],"items[0].KPXX[0].INVOICE_NUM":"2121","items[0].KPXX[0].CUSBUKRS":"0150","items[0].KPXX[0].POST_ACCOUNT_CUS":"","items[0].KPXX[0].INVOICE_NAME":"浙江东廷物产集团有限公司01","items[0].KPXX[0].CUSBUKRS_FLAG":"","items[0].KPXX[0].INVOICE_ADDR":"","items[0].KPXX[0].INVOICE_TEL":"","items[0].KPXX[0].CUS_TYPE":"贸易商","items[0].KPXX[0].INVOICE_BANK":"2121","items[0].KPXX[0].NAME":"浙江东廷物产集团有限公司","items[0].KPXX[1].INVOICE_NUM":"41241","items[0].KPXX[1].CUSBUKRS":"0150","items[0].KPXX[1].POST_ACCOUNT_CUS":"","items[0].KPXX[1].INVOICE_NAME":"浙江东廷物产集团有限公司02","items[0].KPXX[1].CUSBUKRS_FLAG":"","items[0].KPXX[1].INVOICE_ADDR":"","items[0].KPXX[1].INVOICE_TEL":"","items[0].KPXX[1].CUS_TYPE":"贸易商","items[0].KPXX[1].INVOICE_BANK":"1241","items[0].KPXX[1].NAME":"浙江东廷物产集团有限公司","items[0].KPXX[2].INVOICE_NUM":"12421","items[0].KPXX[2].CUSBUKRS":"无","items[0].KPXX[2].POST_ACCOUNT_CUS":"","items[0].KPXX[2].INVOICE_NAME":"浙江东廷物产集团有限公司2-22","items[0].KPXX[2].CUSBUKRS_FLAG":"","items[0].KPXX[2].INVOICE_ADDR":"","items[0].KPXX[2].INVOICE_TEL":"","items[0].KPXX[2].CUS_TYPE":"贸易商","items[0].KPXX[2].INVOICE_BANK":"321412","items[0].KPXX[2].NAME":"浙江东廷物产集团有限公司","items[0].KPXX[3].INVOICE_NUM":"423423","items[0].KPXX[3].CUSBUKRS":"无","items[0].KPXX[3].POST_ACCOUNT_CUS":"","items[0].KPXX[3].INVOICE_NAME":"浙江东廷物产集团有限公司2-23","items[0].KPXX[3].CUSBUKRS_FLAG":"","items[0].KPXX[3].INVOICE_ADDR":"","items[0].KPXX[3].INVOICE_TEL":"","items[0].KPXX[3].CUS_TYPE":"贸易商","items[0].KPXX[3].INVOICE_BANK":"4343243","items[0].KPXX[3].NAME":"浙江东廷物产集团有限公司","items[0].KHC":[],"items[0].BP.TAXPAYER":"","items[0].BP.TXTLG":"浙江东廷物产集团有限公司","items[0].BP.PARTNER_ORGTYPE":"1","items[0].BP.COM_PROV":"330000","items[0].BP.BP_ID_CODE":"","items[0].BP.COM_AREA":"","items[0].BP.COUNTRY":"CN","items[0].BP.BP_SOCIAL_NUM":"","items[0].BP.BU_GROUP":"Z002","items[0].BP.BP_INDSCT":"F5135","items[0].BP.EMPNO":"","items[0].BP.COM_TYPE":"有限责任公司(自然人投资或控股)","items[0].BP.ZNAME_EN":"","items[0].BP.COM_TEL":"","items[0].BP.TRADE_TYPE":"1,2","items[0].BP.TXTSH":"","items[0].BP.BP_ID_CARD":"","items[0].BP.CODE":"1003000361","items[0].BP.COM_STATUS":"1","items[0].BP.ZFDDBR":"施政平","items[0].BP.COM_CITY":"","items[0].BP.FOUND_DAT":"2017-04-17","items[0].BP.LASTUPDATEDTIME":"2023-11-15 17:44:34","items[0].BP.VERSION":4,"items[0].BP.PARTNER_TYPE":"","items[0].BP.STRAS":"浙江省杭州市上城区财富金融中心2幢3504室","items[0].BP.BP_ID_NUM":"91330104MA28NWF65N"}

image.png


博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。