searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

使用 JsonNode 来解析复杂 JSON字符串

2023-12-06 06:42:08
39
0

1.介绍

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,广泛应用于前后端交互、配置文件、数据存储等。在 Java 世界里,Jackson 库是最常用于 JSON 序列化和反序列化的库之一。其中,JsonNode 类提供了一个灵活和强大的方式来解析和操作 JSON 数据。

2.准备工作:添加依赖

首先添加 Jackson 库的 Maven 依赖。

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.12.1</version>
</dependency>
 

3. 步骤

初始化和配置 ObjectMapper

ObjectMapper 是 Jackson 库的核心类。创建一个 ObjectMapper 实例来开始解析。

ObjectMapper objectMapper = new ObjectMapper();

定义对应的 Java 类(可选)

如果已经知道 JSON 数据的结构,可以定义一个相应的 Java 类。

public class Person { private String name; private int age; // getter 和 setter }

使用 readTree 解析 JSON

使用 readTree 方法,可以直接解析 JSON 字符串并将其转化为一个 JsonNode 对象。

String jsonString = "{\"name\":\"John\", \"age\":30}"; JsonNode rootNode = objectMapper.readTree(jsonString);

遍历和提取数据

通过 JsonNode 对象可以遍历 JSON 数据并提取所需的信息。

String name = rootNode.get("name").asText(); int age = rootNode.get("age").asInt();

处理嵌套和数组

JsonNode 可以直接处理嵌套的 JSON 对象和数组。

JsonNode addressNode = rootNode.path("address"); String city = addressNode.get("city").asText();

示例

下面是一个示例如何使用 JsonNode 来解析一个包含嵌套 JSON 对象和 JSON 数组的复杂 JSON 字符串。

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonParserExample {
    public static void main(String[] args) {
        try {
            String jsonString = "{ \"name\" : \"Alice\", \"age\" : 35, \"email\" : \"alice@gmail.com\", \"address\" : { \"city\" : \"San Francisco\", \"state\" : \"CA\" }, \"phoneNumbers\" : [{ \"type\" : \"home\", \"number\" : \"123-456-7890\" }, { \"type\" : \"work\", \"number\" : \"098-765-4321\" }] }";

            ObjectMapper mapper = new ObjectMapper();
            JsonNode rootNode = mapper.readTree(jsonString);

            // 解析简单字段
            String name = rootNode.get("name").asText();
            int age = rootNode.get("age").asInt();
            System.out.println("Name: " + name);
            System.out.println("Age: " + age);

            // 解析嵌套对象
            JsonNode addressNode = rootNode.path("address");
            String city = addressNode.get("city").asText();
            String state = addressNode.get("state").asText();
            System.out.println("City: " + city);
            System.out.println("State: " + state);

            // 解析数组
            JsonNode phoneNumbersNode = rootNode.path("phoneNumbers");
            for (JsonNode phoneNumberNode : phoneNumbersNode) {
                String type = phoneNumberNode.get("type").asText();
                String number = phoneNumberNode.get("number").asText();
                System.out.println(type + " Phone Number: " + number);
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

解析结果:

Name: Alice
Age: 35
City: San Francisco
State: CA
home Phone Number: 123-456-7890
work Phone Number: 098-765-4321

0条评论
0 / 1000
fanjx5
6文章数
0粉丝数
fanjx5
6 文章 | 0 粉丝
原创

使用 JsonNode 来解析复杂 JSON字符串

2023-12-06 06:42:08
39
0

1.介绍

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,广泛应用于前后端交互、配置文件、数据存储等。在 Java 世界里,Jackson 库是最常用于 JSON 序列化和反序列化的库之一。其中,JsonNode 类提供了一个灵活和强大的方式来解析和操作 JSON 数据。

2.准备工作:添加依赖

首先添加 Jackson 库的 Maven 依赖。

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.12.1</version>
</dependency>
 

3. 步骤

初始化和配置 ObjectMapper

ObjectMapper 是 Jackson 库的核心类。创建一个 ObjectMapper 实例来开始解析。

ObjectMapper objectMapper = new ObjectMapper();

定义对应的 Java 类(可选)

如果已经知道 JSON 数据的结构,可以定义一个相应的 Java 类。

public class Person { private String name; private int age; // getter 和 setter }

使用 readTree 解析 JSON

使用 readTree 方法,可以直接解析 JSON 字符串并将其转化为一个 JsonNode 对象。

String jsonString = "{\"name\":\"John\", \"age\":30}"; JsonNode rootNode = objectMapper.readTree(jsonString);

遍历和提取数据

通过 JsonNode 对象可以遍历 JSON 数据并提取所需的信息。

String name = rootNode.get("name").asText(); int age = rootNode.get("age").asInt();

处理嵌套和数组

JsonNode 可以直接处理嵌套的 JSON 对象和数组。

JsonNode addressNode = rootNode.path("address"); String city = addressNode.get("city").asText();

示例

下面是一个示例如何使用 JsonNode 来解析一个包含嵌套 JSON 对象和 JSON 数组的复杂 JSON 字符串。

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonParserExample {
    public static void main(String[] args) {
        try {
            String jsonString = "{ \"name\" : \"Alice\", \"age\" : 35, \"email\" : \"alice@gmail.com\", \"address\" : { \"city\" : \"San Francisco\", \"state\" : \"CA\" }, \"phoneNumbers\" : [{ \"type\" : \"home\", \"number\" : \"123-456-7890\" }, { \"type\" : \"work\", \"number\" : \"098-765-4321\" }] }";

            ObjectMapper mapper = new ObjectMapper();
            JsonNode rootNode = mapper.readTree(jsonString);

            // 解析简单字段
            String name = rootNode.get("name").asText();
            int age = rootNode.get("age").asInt();
            System.out.println("Name: " + name);
            System.out.println("Age: " + age);

            // 解析嵌套对象
            JsonNode addressNode = rootNode.path("address");
            String city = addressNode.get("city").asText();
            String state = addressNode.get("state").asText();
            System.out.println("City: " + city);
            System.out.println("State: " + state);

            // 解析数组
            JsonNode phoneNumbersNode = rootNode.path("phoneNumbers");
            for (JsonNode phoneNumberNode : phoneNumbersNode) {
                String type = phoneNumberNode.get("type").asText();
                String number = phoneNumberNode.get("number").asText();
                System.out.println(type + " Phone Number: " + number);
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

解析结果:

Name: Alice
Age: 35
City: San Francisco
State: CA
home Phone Number: 123-456-7890
work Phone Number: 098-765-4321

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0