2015-12-15 59 views
1

我有一个json响应文件作为输入需要将其转换为csv。 输入文件包含1000多行响应。每个响应都包含多个客户端信息。要求输出是每行必须是一个客户端信息春季批量单输入线路到多线路输出

例如:输入的一行

{"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 

任何一个可以在此使用春季 - 建议批量?

回答

1

首先,您需要阅读json文件。为此,您可以使用组合为FlatFileItemReaderJsonLineMapperJsonRecordSeparatorPolicy

<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转换为与你的属性(姓名,年龄),豆是可以让你使用一个BeanWrapperFieldExtractor为您lineAggregator;或者您可以使用FieldExtractor,让您通过索引获取Map值。