用spring批处理读取复杂的json文件

我有一个复杂的json文件(具有嵌套的json数组)结构,如下所示:

{"persons":[ {"id":"1", "firstName": "X", "lastName": "X", "infos": [{"address":[{"city": "X", "country": "X"}]}]}, {"id":"2", "firstName": "Y", "lastName": "Y", "infos": [{"address":[{"city": "Y", "country": "Y"}]}]} ]} 

我想分别阅读每一行(一个人)

所以我的弹簧批量配置是这样的

           

mapper类看起来像

  public class PersonLineMapper implements LineMapper { private JsonLineMapper delegate; public mapLine(String line, int lineNumber) throws Exception { Map personAsMap = delegate.mapLine(line, lineNumber); Person person = new Person(); // map fields return person ; } public void setDelegate(JsonLineMapper delegate) { this.delegate = delegate; } } 

问题是读者只读取一行(所以一次提交),因为他读取我的json文件中的人员数组,就像整行,但我想读取而不是每行一行(一个人一次)

这个怎么做 ?

我尝试过这样一个简单的json文件:

  { "id": "1", "firstName": "X", "lastName": "X"} { "id": "2", "firstName": "Y", "lastName": "Y"} 

它运作良好……我逐一阅读每个人

非常感谢你

不幸的是,您有两种选择:

  1. 编写自己的记录分隔符,忽略包装人员元素/行。
  2. 在读取文件之前,先在步骤中编辑该文件,以使用sed命令之类的内容删除该包装行。

如果选择选项2,则可以在实际处理选项之前的步骤中通过SystemCommandTasklet执行它。

另一种方法是通过转换步骤运行文件以展平对象结构,因此您只需要一组People来处理。 哪个应该没问题,除非你正在处理大文件。