如何创建一个项目 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也是一个不错的选择,但肯定不是单一对象。