吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 796|回复: 9
收起左侧

[学习记录] 如何优雅的解析多层嵌套的复制JSON数据集

[复制链接]
wh52pj 发表于 2023-12-12 23:22

JsonUtils

package org.example.wenhao.json;

import com.fasterxml.jackson.databind.ObjectMapper;
import ognl.Ognl;
import ognl.OgnlContext;

import java.util.Map;
import java.util.logging.Logger;

public class JsonUtils {
    private static Logger logger = Logger.getLogger("JsonUtils");
    private final static ObjectMapper objectMapper = new ObjectMapper();
    public static ObjectMapper getInstance() {
        return objectMapper;
    }
    public static <T> T parse(String jsonStr, Class<T> clazz) throws Exception {
        return getInstance().readValue(jsonStr, clazz);
    }

    /**
     * 使用ognl对象图导航语言
     * home.php?mod=space&uid=952169 map
     * @param path
     * @param klass
     * @return
     * @param <T>
     * @throws Exception
     */
    public static <T> T getValue(Map map, String path, Class<T> klass) throws Exception {
        OgnlContext ctx = new OgnlContext();
        ctx.setRoot(map);
        T value = (T) Ognl.getValue(path, ctx, ctx.getRoot());
        return value;
    }
}

TestJson

package org.example.wenhao.json;

import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import org.junit.jupiter.api.Test;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.logging.Logger;

/**
 *
 *  如何优雅的解析多层嵌套的复制JSON数据集。
 *
 *  json数据
 *
 *      {
 *         "a1": {
 *             "b1": {
 *                 "c1": {
 *                     "d1": "d1"
 *                 }
 *             }
 *         },
 *         "a2": {
 *             "b2": {
 *                 "c2": {
 *                     "d2": ["i1", "i2", "i3"]
 *                 }
 *             }
 *         }
 *     }
 */
public class TestJson {
    private static Logger logger = Logger.getLogger("TestJson");

    @Test
    public void test(){
        String jsonData = "{\"a1\":{\"b1\":{\"c1\":{\"d1\":\"d1\"}}},\"a2\":{\"b2\":{\"c2\":{\"d2\":[\"i1\",\"i2\",\"i3\"]}}}}";
        try {
            //Map<String,Object> map = JsonUtils.getValue(jsonData, "a1.bi.ci", Map.class);
            //parse the json data into a map
            Map<String, Object> map = JsonUtils.parse(jsonData, Map.class);
            Map<String,Object> map1 = (Map<String, Object>) JsonUtils.getValue(map, "a1.b1", Object.class);
            System.out.println("map1 = " + map1);
            //get the value of the key "a1.b1.c1.d1" from the map
            String s = JsonUtils.getValue(map, "a1.b1.c1.d1", String.class);
            System.out.println(s);
            Map<String,Object> map2 = (Map<String, Object>) JsonUtils.getValue(map, "a2.b2.c2", Object.class);
            System.out.println("map2 = " + map2);
            //get the value of the key "a2.b2.c2.d2" from the map
            List<String> list = JsonUtils.getValue(map, "a2.b2.c2.d2", List.class);
            System.out.println(list);
        } catch (Exception e) {
            logger.info(e.getMessage());
            //throw new RuntimeException(e);
        } finally {
            System.out.println("this");
        }
    }
}

Maven

<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>org.example</groupId>
  <artifactId>jsondemo</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>jsondemo</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>cn.hutool</groupId>
      <artifactId>hutool-all</artifactId>
      <version>5.8.16</version>
    </dependency>

    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <version>RELEASE</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.11.4</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.11.4</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.11.4</version>
    </dependency>
    <dependency>
      <groupId>ognl</groupId>
      <artifactId>ognl</artifactId>
      <version>3.1.26</version>
    </dependency>

    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.12.0</version>
    </dependency>

  </dependencies>
</project>

免费评分

参与人数 4吾爱币 +6 热心值 +4 收起 理由
夜莺高歌 + 1 + 1 我很赞同!
为之奈何? + 1 + 1 我很赞同!
hrh123 + 1 + 1 用心讨论,共获提升!
苏紫方璇 + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

okmad 发表于 2023-12-13 07:28
学习了学习了
FruitBaby 发表于 2023-12-13 08:25
夜莺高歌 发表于 2023-12-13 08:26
sunflash 发表于 2023-12-13 08:50
虽然每没有看懂,还是送上感谢。JSON有格式化工具吧
sadsnow 发表于 2023-12-13 09:47
不错,看上去有用
lkhjzw 发表于 2023-12-13 10:59
quicktype,了解一下?
altair520 发表于 2023-12-13 14:03
quicktype挺好用的
 楼主| wh52pj 发表于 2023-12-15 18:34
sunflash 发表于 2023-12-13 08:50
虽然每没有看懂,还是送上感谢。JSON有格式化工具吧

https://www.bejson.com/
sunflash 发表于 2023-12-18 09:02
wh52pj 发表于 2023-12-15 18:34
https://www.bejson.com/

感谢感谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-29 16:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表