[英]How to convert a complex JSON to CSV in Java
我有一個complex.json
文件,我希望使用 Java Spring boot 將其轉換為 CSV 文件。
下面是我的complex.json
文件:
{
"requestId": "1P02XV425KCASEZGQLB8LPQMF4ZXCURRR01",
"recyleBinRecords": [
{
"Record": {
"ProductName": "Name1",
"Id": "1P02XV425KCASEZGQLB8LPQMF4ZXCUBCTA01"
"ProductArea": "Area1"
},
"dependecyMaterial": [
{
"Name": "D1",
"id": "1P02XV425KCASEZGQLB8LPQMF4ZXCUBCTA01",
"parentid": "1P02XV425KCASEZGQLB8LPQMF4ZXCUBCTA01",
"value": "Value1"
},
{
"Name": "d2",
"id": "1P02XV425KCASEZGQLB8LPQMF4ZXCUBCTA01",
"parentid": "1P02XV425KCASEZGQLB8LPQMF4ZXCUBCTA01",
"value": "value2"
}]},{
"Record": {
"ProductName": "Name2",
"Id": "1P02XV425KCASEZGQLB8LPQMF4ZXCUBCTA01",
"ProductArea": "Product2"
},
"dependecyMaterial": [
{
"Name": "D3",
"id": "1P02XV425KCASEZGQLB8LPQMF4ZXCUBCTA01",
"parentid": "P1",
"value": "value1"
},
{
"Name": "D4",
"id": "1P02XV425KCASEZGQLB8LPQMF4ZXCUBCTA01",
"parentid": "P2",
"value": "value2"
}
]
}
]
}
下面是我試過的代碼,但它沒有給出任何列異常。
JsonNode jsonTree = new ObjectMapper().readTree(new File("src/main/resources/complex.json"));
Builder csvSchemaBuilder = CsvSchema.builder();
JsonNode firstObject = jsonTree.elements().next();
firstObject.fieldNames().forEachRemaining(fieldName -> {csvSchemaBuilder.addColumn(fieldName);} );
CsvSchema csvSchema = csvSchemaBuilder.build().withHeader();
CsvMapper csvMapper = new CsvMapper();
csvMapper.writerFor(JsonNode.class)
.with(csvSchema)
.writeValue(new File("src/main/resources/orderLines.csv"), jsonTree);Copy
需要一個解決方案來將我的 JSON 轉換為 java 中的 CSV。
有幾件事導致了這種情況。 您遇到異常的主要原因是您的 csv 模式沒有要映射的列。 運行調試器並查看行JsonNode firstObject = jsonTree.elements().next();
當您運行firstObject.fieldNames().forEachRemaining(fieldName -> {csvSchemaBuilder.addColumn(fieldName);} );
時返回以及哪些字段被添加到模式中
話雖如此,由於 CSV 生成器不支持嵌套對象,解析可能仍無法通過。 有幾種方法可以處理這個問題。 您可以編寫自定義方法來處理結構並輸出扁平化數據,或者使用庫來處理轉換。 我過去做過的一種方法是使用 JOLT 庫(json 到 json 轉換)預處理 JSON 並創建一個臨時文檔並對其進行解析。 請參閱此答案中的詳細信息 - 從 spring-boot 控制器返回一個 JSON 響應作為 CSV 文件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.