您的位置:

使用Spring Boot解析JSON

一、Maven依赖

使用Spring Boot处理JSON需要将Jackson依赖加入到项目中,具体内容如下:

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

二、解析JSON字符串

在Java中使用Jackson处理JSON数据,可以通过以下两种方式来实现:

1. ObjectMapper

ObjectMapper是Jackson提供的标准JSON数据流的读写工具,可以读入一段JSON数据,并将其转换成Java对象。示例代码如下:

ObjectMapper objectMapper = new ObjectMapper();
String jsonStr = "{\"name\":\"Tom\",\"age\":20,\"gender\":\"male\"}";
try {
    User user = objectMapper.readValue(jsonStr, User.class);
    System.out.println(user);
} catch (JsonProcessingException e) {
    e.printStackTrace();
}

其中,User类包含了三个属性:name、age、gender,同时要在类中添加对应的getter和setter方法。

2. JsonNode

JsonNode是Jackson提供的一种兼容性极强的JSON解析库,它提供了一种轻量级、高效的处理JSON数据的方式,同时允许使用者通过Java API来访问JSON数据的各种元素。示例代码如下:

ObjectMapper objectMapper = new ObjectMapper();
String jsonString = "{\"book\":{\"title\":\"Java编程思想\",\"author\":\"Bruce Eckel\",\"price\":108}}";
try {
    JsonNode rootNode = objectMapper.readTree(jsonString);
    JsonNode bookNode = rootNode.get("book");
    String title = bookNode.get("title").asText();
    String author = bookNode.get("author").asText();
    int price = bookNode.get("price").asInt();
    System.out.println("Title: " + title);
    System.out.println("Author: " + author);
    System.out.println("Price: " + price);
} catch (JsonProcessingException e) {
    e.printStackTrace();
}

三、解析JSON文件

在实际开发中,经常需要读取JSON文件,并将其中的数据转换成Java对象。这时候,使用ObjectMapper可以快速地实现这个功能。示例代码如下:

ObjectMapper objectMapper = new ObjectMapper();
try {
    File file = new File("src/main/resources/user.json");
    User user = objectMapper.readValue(file, User.class);
    System.out.println(user);
} catch (Exception e) {
    e.printStackTrace();
}

注意,这里需要先将JSON文件中的数据读取出来,再使用ObjectMapper将其转换成Java对象。

四、生成JSON数据

在使用Spring Boot开发Web应用时,返回给客户端的数据大多是JSON格式的数据。以下是两种常见的方式来生成JSON数据。

1. 使用Map构造JSON对象

Map可以用来构造JSON对象,通过在Map中加入键值对来表示JSON对象中的属性和属性值。示例代码如下:

Map<String, Object> map = new HashMap<>();
map.put("name", "Tom");
map.put("age", 18);
map.put("gender", "male");
ObjectMapper mapper = new ObjectMapper();
mapper.writeValueAsString(map);

运行上述代码后,得到的JSON字符串如下:

{"name":"Tom","age":18,"gender":"male"}

2. 直接生成JSON String

当我们需要处理一些比较复杂的JSON数据时,另一个常见的方法是使用Jackson提供的JsonGenerator,直接生成JSON数据字符串。示例代码如下:

StringWriter writer = new StringWriter();
JsonGenerator generator = new JsonFactory().createGenerator(writer);
generator.writeStartObject();
// add properties to object...
generator.writeStringField("name", "Tom");
generator.writeNumberField("age", 18);
generator.writeStringField("gender", "male");
generator.writeEndObject();
generator.close();
String json = writer.toString();

运行上述代码后,得到的JSON字符串如下:

{"name":"Tom","age":18,"gender":"male"}