java解析复杂json

我个人验证了两个方法

一.基于org.json

1.jar包依赖

复制代码
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
	<groupId>org.json</groupId>
	<artifactId>json</artifactId>
	<version>20240303</version>
</dependency>

2.test json,精简后的测试json

复制代码
level1Array: [{
	"couponId": "DBD6E1A48CC699C942618BE41CA231DA",
	"title": "11.9元麦辣鸡腿堡",
	"couponCode": [{
		"couponCodeEndTime": "2024-12-23 23:59:59",
		"couponCardType": 0
	}],
	"remainQuantity": 29455158,
	"promotionId": "111799015",
	"receiveQuantity": 1
}, {
	"couponId": "D8989417A8CBE902E55D96CED8B81C54",
	"title": "姜姜暖奶铁买一送一",
	"couponCode": [{
		"couponCodeEndTime": "2024-12-27 23:59:59",
		"couponCardType": 0
	}],
	"remainQuantity": 1720778,
	"promotionId": "111756005",
	"receiveQuantity": 1
}]

3.解析源码,代码都是验证过的

复制代码
/**jackson解析*/
    void paserJsonByJackson(){

        try {
            String jsonContent = new String(Files.readAllBytes(Paths.get("D://1/coujsontest.json")));

            ObjectMapper objectMapper = new ObjectMapper();
            //第一层
            JsonNode rootJsonNode = objectMapper.readTree(jsonContent);

            String msgId = rootJsonNode.get("msgId").asText();
            String traceId = rootJsonNode.get("traceId").asText();
            String from = rootJsonNode.get("from").asText();

            logger.info("msgId: " + msgId);
            logger.info("traceId: " + traceId);
            logger.info("from: " + from);

            //第一层的body node
            JsonNode bodyNode = rootJsonNode.get("body");
            //第二层的body attribute
            String customerId = bodyNode.get("customerId").asText();
            int receiveType = bodyNode.get("receiveType").asInt();
            String tradeNo = bodyNode.get("tradeNo").asText();

            logger.info("customerId: " + customerId);
            logger.info("receiveType: " + receiveType);
            logger.info("tradeNo: " + tradeNo);
            //第二层的body 的 coupons node
            JsonNode couponsNode = bodyNode.get("coupons");
            for(int i = 0;i<couponsNode.size();i++){
                //第三层的couponsNode 的 coupon node
                JsonNode couponNode = couponsNode.get(i);
                //第三层的couponNode 的 attribute
                String couponId = couponNode.get("couponId").asText();
                String couponTitle = couponNode.get("title").asText();
                String couponPromotionId = couponNode.get("promotionId").asText();
                int couponReceiveQuantity = couponNode.get("receiveQuantity").asInt();
                int couponRemainQuantity = couponNode.get("remainQuantity").asInt();

                logger.info("couponId: " + couponId);
                logger.info("couponTitle: " + couponTitle);
                logger.info("couponPromotionId: " + couponPromotionId);
                logger.info("couponReceiveQuantity: " + couponReceiveQuantity);
                logger.info("couponRemainQuantity: " + couponRemainQuantity);
                //第三层的couponNode 的 couponCodeNode
                JsonNode couponCodeNode = couponNode.get("couponCode");
                for(int j = 0;j<couponCodeNode.size();j++){
                    //第四层的couponCodeNode 的 couponCode node
                    JsonNode couponCode = couponCodeNode.get(j);
                    //第四层的couponCode 的 couponCode node
                    int isAvailable = couponCode.get("isAvailable").asInt();
                    int isDeleted = couponCode.get("isDeleted").asInt();
                    String createdUser = couponCode.get("createdUser").asText();
                    String updatedUser = couponCode.get("updatedUser").asText();
                    String updatedDate = couponCode.get("updatedDate").asText();
                    logger.info("isAvailable: " + isAvailable);
                    logger.info("isDeleted: " + isDeleted);
                    logger.info("createdUser: " + createdUser);
                    logger.info("updatedUser: " + updatedUser);
                    logger.info("updatedDate: " + updatedDate);
                }

            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

二、基于jackson,spring内部解析json也是这个,最终生产上使用的这个;

1.jar依赖

复制代码
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-core</artifactId>
	<version>2.18.2</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.18.2</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-annotations</artifactId>
	<version>2.18.2</version>
</dependency>

2.源码

复制代码
/**jackson解析*/
void paserJsonByJacksonTwo(){
    String json = "{\"name\": \"John\", \"age\": 30, \"address\": {\"street\": \"123 Main St\", \"city\": \"New York\"}}";

    try {
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode jsonNode = objectMapper.readTree(json);

        String name = jsonNode.get("name").asText();
        int age = jsonNode.get("age").asInt();
        JsonNode addressNode = jsonNode.get("address");
        String street = addressNode.get("street").asText();
        String city = addressNode.get("city").asText();

        logger.info("Name: " + name);
        logger.info("Age: " + age);
        logger.info("Street: " + street);
        logger.info("City: " + city);

    } catch (Exception e) {
        e.printStackTrace();
    }
}
相关推荐
艾伦_耶格宇25 分钟前
【kubernetes - 1.28版本】-11 K8S核心组件
java·容器·kubernetes
2301_7807896639 分钟前
深度伪造即服务:新型网络诈骗的“完美面具”与识别之道
java·网络·ddos
溪语流沙40 分钟前
【每天一个CSS | Day41】开关三连:一套状态机,三种视觉翻译
前端·css·html5·每日一练·按钮
变与不变8061 小时前
css定位布局精讲
前端·css
LHICOD1 小时前
Linux-2
java·linux·后端·jar·vmware·svm·vm
香蕉大香蕉(06敬畏市场)1 小时前
MySQL 单点详解(03)
java·数据库·mysql·面试·八股·大厂实习
FRing031 小时前
JavaScript入门到精通三十三(异常处理、call方法、apply方法、bind方法、防抖、节流)
开发语言·前端·javascript
呆呆敲代码的小Y1 小时前
【实战精选面试题】C# 面试题详细解答,按难易程度排序
android·java·游戏·c#·游戏开发·unity面试题·c#面试题
水无痕simon1 小时前
3、工程重构
java·spring cloud·重构
阿里云基础软件2 小时前
Agent 任务提速 10.71%,内存占用降低 21.60%|Alibaba Cloud Linux 4 重大发布
java·linux·人工智能·操作系统·agent