用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"}
它运作良好……我逐一阅读每个人
非常感谢你
不幸的是,您有两种选择:
- 编写自己的记录分隔符,忽略包装人员元素/行。
- 在读取文件之前,先在步骤中编辑该文件,以使用sed命令之类的内容删除该包装行。
如果选择选项2,则可以在实际处理选项之前的步骤中通过SystemCommandTasklet
执行它。
另一种方法是通过转换步骤运行文件以展平对象结构,因此您只需要一组People来处理。 哪个应该没问题,除非你正在处理大文件。