跳到主要内容

JSON 项目读取器和写入器

QWen Plus 中英对照 JSON Item Readers And Writers

Spring Batch 提供了对以下格式的 JSON 资源进行读取和写入的支持:

[
{
"isin": "123",
"quantity": 1,
"price": 1.2,
"customer": "foo"
},
{
"isin": "456",
"quantity": 2,
"price": 1.4,
"customer": "bar"
}
]
json

假设 JSON 资源是一个 JSON 对象数组,每个对象对应单个项目。Spring Batch 不依赖于任何特定的 JSON 库。

JsonItemReader

JsonItemReader 将 JSON 解析和绑定委托给 org.springframework.batch.item.json.JsonObjectReader 接口的实现。此接口的设计目的是通过使用流式 API 以分块方式读取 JSON 对象。目前提供了两种实现:

  • Jackson 通过 org.springframework.batch.item.json.JacksonJsonObjectReader

  • Gson 通过 org.springframework.batch.item.json.GsonJsonObjectReader

为了能够处理 JSON 记录,需要以下内容:

  • Resource: 表示要读取的 JSON 文件的 Spring Resource。

  • JsonObjectReader: 用于解析和将 JSON 对象绑定到项目的 JSON 对象读取器。

以下示例展示了如何定义一个 JsonItemReader,它与之前的 JSON 资源 org/springframework/batch/item/json/trades.json 配合使用,并基于 Jackson 的 JsonObjectReader

@Bean
public JsonItemReader<Trade> jsonItemReader() {
return new JsonItemReaderBuilder<Trade>()
.jsonObjectReader(new JacksonJsonObjectReader<>(Trade.class))
.resource(new ClassPathResource("trades.json"))
.name("tradeJsonItemReader")
.build();
}
java

JsonFileItemWriter

JsonFileItemWriter 将项目的序列化委托给 org.springframework.batch.item.json.JsonObjectMarshaller 接口。该接口的契约是接收一个对象并将其序列化为 JSON String。目前提供了两种实现:

  • Jackson 通过 org.springframework.batch.item.json.JacksonJsonObjectMarshaller

  • Gson 通过 org.springframework.batch.item.json.GsonJsonObjectMarshaller

为了能够写入 JSON 记录,需要以下内容:

  • Resource: 表示要写入的 JSON 文件的 Spring Resource

  • JsonObjectMarshaller: 用于将对象序列化为 JSON 格式的 JSON 对象序列化器

以下示例展示了如何定义一个 JsonFileItemWriter

@Bean
public JsonFileItemWriter<Trade> jsonFileItemWriter() {
return new JsonFileItemWriterBuilder<Trade>()
.jsonObjectMarshaller(new JacksonJsonObjectMarshaller<>())
.resource(new ClassPathResource("trades.json"))
.name("tradeJsonFileItemWriter")
.build();
}
java