我有一个json响应文件作为输入需要将其转换为csv。 输入文件包含超过1000行响应。每个响应都包含多个客户端信息。请求的输出是每行必须是一个客户信息
ex:一行输入
{"monitoringMessage":{"type":"SEED","messageId":"eaf2f4d1-ccaa-4ca2-baa3-130aceac9c48_5","messageTimestamp":"2015-12-11T09:31:48.040Z","inLanguage":"en-US","reference":"Duns_notif","notificationCount":1,"notifications":[{"organization":{"isExporter":false,"name":"xyz","age":"34"},{"organization":{"isExporter":false,"name":"abc","age":"40"}]}}
预期输出(csv格式):
xys,34
abc,40
任何人都可以使用Spring-batch建议吗?
答案 0 :(得分:1)
首先,您需要阅读json文件。为此,您可以将FlatFileItemReader
组合使用JsonLineMapper
和JsonRecordSeparatorPolicy
。
<bean class="org.springframework.batch.item.file.FlatFileItemReader">
<property name="resource" value="${input.file.location}"/>
<property name="recordSeparatorPolicy">
<bean class="org.springframework.batch.item.file.separator.JsonRecordSeparatorPolicy" />
</property>
<property name="lineMapper">
<bean class="org.springframework.batch.item.file.mapping.JsonLineMapper" />
</property>
</bean>
然后您需要FlatFileItemWriter
来编写csv文件。
<bean class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step">
<property name="resource" value="${output.file.location}"></property>
<property name="lineAggregator">
<bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
<property name="delimiter" value=","></property>
<property name="fieldExtractor" ref="fieldExtractor"></property>
</bean>
</property>
</bean>
由于JsonLineMapper
将返回Map
,您需要ItemProcessor
将此Map
转换为具有您的属性(名称,年龄)的bean {39} ;让您使用BeanWrapperFieldExtractor
作为lineAggregator
;或者您可以使用FieldExtractor
来获取索引的地图值。