以下是关于如何使用Jackson的JsonGenerator
类来创建JSON内容以及如何使用JsonParser
类来读取JSON内容的教程。
依赖项
首先,在pom.xml
文件中添加以下依赖项以引入Jackson库:
xml
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
这将自动引入以下库到您的项目中:
jackson-annotations-2.9.8.jar
jackson-core-2.9.8.jar
jackson-databind-2.9.8.jar
始终建议使用Maven中央仓库中的最新版本。
使用JsonGenerator
写入JSON内容
步骤:
- 创建
JsonFactory
实例。 - 使用
JsonFactory
创建JsonGenerator
。 - 使用
JsonGenerator
的方法构建JSON结构。 - 关闭
JsonGenerator
。
示例代码:
java
package net.javaguides.jackson;
import java.io.File;
import java.io.IOException;
import com.fasterxml.jackson.core.JsonEncoding;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
/**
* 使用JsonGenerator写入JSON到文件
* @author Ramesh Fadatare
*/
public class WriteJsonUsingJsonGenerator {
public static void main(String[] args) throws IOException {
JsonFactory factory = new JsonFactory();
// 创建JsonGenerator
JsonGenerator generator = factory.createGenerator(new File("post.json"), JsonEncoding.UTF8);
// 开始JSON对象
generator.writeStartObject(); // 开始 {
// 添加字符串字段
generator.writeNumberField("id", 100);
generator.writeStringField("title", "Jackson JSON API Guide");
generator.writeStringField("description", "Post about Jackson JSON API");
generator.writeStringField("content", "HTML content here");
// 创建数组
generator.writeFieldName("tags");
generator.writeStartArray(); // 开始 [
// 第一个标签对象
generator.writeStartObject();
generator.writeNumberField("id", 1);
generator.writeStringField("name", "JSON");
generator.writeEndObject();
// 第二个标签对象
generator.writeStartObject();
generator.writeNumberField("id", 2);
generator.writeStringField("name", "Java");
generator.writeEndObject();
// 第三个标签对象
generator.writeStartObject();
generator.writeNumberField("id", 3);
generator.writeStringField("name", "Jackson");
generator.writeEndObject();
generator.writeEndArray(); // 结束 ]
generator.writeEndObject(); // 结束 }
// 关闭JSON生成器
generator.close();
}
}
运行上述程序后,会在post.json
文件中写入如下JSON内容:
json
{
"id" : 100,
"title" : "Jackson JSON API Guide",
"description" : "Post about Jackson JSON API",
"content" : "HTML content here",
"tags" : [
{ "id" : 1, "name" : "JSON" },
{ "id" : 2, "name" : "Java" },
{ "id" : 3, "name" : "Jackson" }
]
}
使用JsonParser
读取JSON内容
在本例中,我们将从外部文件post.json
(在之前的例子中我们已经写入了JSON内容)读取JSON内容。
步骤:
- 创建
JsonParser
使用JsonFactory.createJsonParser()
方法。 - 使用
nextToken()
方法遍历每个JSON字符串作为token。 - 检查每个token并相应处理。
示例代码:
java
package net.javaguides.jackson;
import java.io.File;
import java.io.IOException;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
/**
* 使用JsonParser从文件读取JSON
* @author Ramesh Fadatare
*/
public class ReadJsonUsingJsonParser {
public static void main(String[] args) throws IOException {
JsonFactory factory = new JsonFactory();
// 创建File对象
File file = new File("post.json");
// 创建JsonParser
JsonParser parser = factory.createParser(file);
// 读取第一个对象即 {
JsonToken token = parser.nextToken();
// 读取JSON对象
while (parser.nextToken() != null) {
if (token == JsonToken.FIELD_NAME) {
String fieldName = parser.getCurrentName();
token = parser.nextToken(); // 移动到值
switch (fieldName) {
case "id":
System.out.println("ID: " + parser.getIntValue());
break;
case "title":
System.out.println("Title: " + parser.getText());
break;
case "description":
System.out.println("Description: " + parser.getText());
break;
case "content":
System.out.println("Content: " + parser.getText());
break;
case "tags":
System.out.println("Tags are - ");
while (parser.nextToken() != JsonToken.END_ARRAY) { // 遍历数组直到 ]
if (parser.getCurrentToken() == JsonToken.START_OBJECT) {
while (parser.nextToken() != JsonToken.END_OBJECT) {
if ("id".equals(parser.getCurrentName())) {
parser.nextToken();
System.out.print("ID: " + parser.getIntValue() + ", ");
} else if ("name".equals(parser.getCurrentName())) {
parser.nextToken();
System.out.println("Name: " + parser.getText());
}
}
}
}
break;
}
}
}
parser.close();
}
}
输出:
ID: 100
Title: Jackson JSON API Guide
Description: Post about Jackson JSON API
Content: HTML content here
Tags are -
ID: 1, Name: JSON
ID: 2, Name: Java
ID: 3, Name: Jackson
总结
以上代码展示了如何使用JsonGenerator
创建复杂的JSON结构,并且使用JsonParser
解析这些结构。
通过这种方式,您可以灵活地生成和解析JSON数据,这对于与Web服务交互或处理配置文件非常有用。