如何创建一个项目 reader 来读取主对象内的 JSON 对象和对象数组?
How to create an item reader which reads a JSON object and array of object inside the main object?
我正在创建一个 spring 批处理应用程序,它接受来自 JobParameters 的文件名并使用它来读取特定路径中的 json 文件。
我尝试创建一个 JsonItemReader,下面是代码...
@Bean
@StepScope
public JsonItemReader<MyObject> myJsonItemReader() {
final ObjectMapper mapper = new ObjectMapper();
final JacksonJsonObjectReader<MyObject> jsonObjectReader = new JacksonJsonObjectReader<>(
MyObject.class);
jsonObjectReader.setMapper(mapper);
final String filePath = config.getRootfolder() + "/" + inputInfo.getFileName();
return new JsonItemReaderBuilder<MyObject>().jsonObjectReader(jsonObjectReader)
.resource(new FileSystemResource(filePath))
.name("myJsonItemReader")
.build();
}
这是我要阅读的示例 json。
{
"attr1":"abc",
"list":[
{
"attr_list1": "abc",
"attr_list2":"abc"
},
{
"attr_list1": "abc",
"attr_list2":"abc",
}
]
}
但是在 运行 和调试我的 reader 时,我收到错误消息“Json 输入流必须以对象数组开头”
JsonItemReader 需要一个 JSON 对象数组作为输入,如其 Javadoc 中所述:
ItemStreamReader implementation that reads Json objects from a Resource having
the following format:
[ { // JSON object }, { // JSON object } ]
您的输入不符合预期的格式,因此您需要调整您的输入或使用其他项目reader。
我想提一下,单个 json 对象不适合用作批处理的输入。我相信输入应该是一个对象数组,以便项目 reader returns 一个接一个地设计为与 Spring Batch(和其他)提供的面向块的处理模型一起工作frameworks/tools)。 ndjson也是一个不错的选择,但肯定不是单一对象。
我正在创建一个 spring 批处理应用程序,它接受来自 JobParameters 的文件名并使用它来读取特定路径中的 json 文件。
我尝试创建一个 JsonItemReader,下面是代码...
@Bean
@StepScope
public JsonItemReader<MyObject> myJsonItemReader() {
final ObjectMapper mapper = new ObjectMapper();
final JacksonJsonObjectReader<MyObject> jsonObjectReader = new JacksonJsonObjectReader<>(
MyObject.class);
jsonObjectReader.setMapper(mapper);
final String filePath = config.getRootfolder() + "/" + inputInfo.getFileName();
return new JsonItemReaderBuilder<MyObject>().jsonObjectReader(jsonObjectReader)
.resource(new FileSystemResource(filePath))
.name("myJsonItemReader")
.build();
}
这是我要阅读的示例 json。
{
"attr1":"abc",
"list":[
{
"attr_list1": "abc",
"attr_list2":"abc"
},
{
"attr_list1": "abc",
"attr_list2":"abc",
}
]
}
但是在 运行 和调试我的 reader 时,我收到错误消息“Json 输入流必须以对象数组开头”
JsonItemReader 需要一个 JSON 对象数组作为输入,如其 Javadoc 中所述:
ItemStreamReader implementation that reads Json objects from a Resource having
the following format:
[ { // JSON object }, { // JSON object } ]
您的输入不符合预期的格式,因此您需要调整您的输入或使用其他项目reader。
我想提一下,单个 json 对象不适合用作批处理的输入。我相信输入应该是一个对象数组,以便项目 reader returns 一个接一个地设计为与 Spring Batch(和其他)提供的面向块的处理模型一起工作frameworks/tools)。 ndjson也是一个不错的选择,但肯定不是单一对象。