2015-12-15 63 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值。