簡體   English   中英

如何在 Java 中將復雜的 JSON 轉換為 CSV

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM