簡體   English   中英

在Java中將嵌套的任意JSON轉換為CSV

[英]Convert nested arbitrary JSON to CSV in Java

這個問題已被多次詢問,但我找不到解決問題的答案。

我正在嘗試將嵌套的JSON格式轉換為CSV格式,如下所示:

JSON結構是任意的可以是任何嵌套或不嵌套的結構

我不想知道它,這是一個數據庫答案,我需要將這個JSON答案導出到CSV文件中。

這是一個例子

輸入:

   {
    "_id": 1,
    "name": "Aurelia Menendez",
    "scores": [
              {
                 "type": "exam",
                 "score": 60.06045071030959
               },
               {
                 "type": "quiz",
                 "score": 52.79790691903873
               },
               {
                "type": "homework",
                "score": 71.76133439165544
               }
             ]
          }

我正在尋找的輸出:

_id,name,scores.type,scores.score,scores.type,scores.score,scores.type,scores.score  
 1,Aurelia Menendez,exam,60.06...,quiz,52.79...,homework,71.76..

這是一個示例,它可以是任何其他JSON文檔。

這里的想法是在CSV列名稱中使用點表示法。

我已經使用過CDL,但輸出不是我想要的:

_id scores  name
 1  "[{score:60.06045071030959,type:exam},{score:52.79790691903873,type:quiz},{score:71.76133439165544,type:homework}]" Aurelia Menendez

那么如何使用點表示法以通用方式將嵌套的JSON轉換為CSV?

編輯

使用Jackson對JSON進行反序列化:

   ObjectMapper mapper=new ObjectMapper();

    JsonNode jsonNode=mapper.readValue(new File("C:\\...\\...\...\\test.json"), JsonNode.class);

伊斯梅爾

在Java中將JSON轉換為XLS / CSV可以滿足您的需求。

基本上,您需要使用org.json.CDL將JSON轉換為CSV格式

評論是不方便發布長篇答案的地方,所以我在這里發布我的答案。

  1. 分析您的JSON以及您可以從數據庫獲得的所有可能的JSON結構。 它應該是有限數量的JSON表單。

  2. 正如您已經分析了JSON結構,構建了一個類/類層次結構,它完全反映了這種結構。

  3. 使用您選擇的JSON序列化程序/反序列化庫 ,將JSON反序列化為java對象。

  4. 使用StringBuffer / StringBuilder類,迭代對象信息,並構建逗號分隔(或制表符分隔)字符串。

  5. 將您在前一階段構建的字符串寫入文件。

而已。

就像你說的一樣 :

JSON結構是任意的可以是任何嵌套或不嵌套的結構

JSON到CSV轉換不能一概而論,因為它因用戶而異,也取決於具體要求。

但仍然有一個 json2flat試圖實現它。 但它可能與用戶的要求不同。 還是值得一試。

例如,對於上面給出的JSON:

{
    "_id": 1,
    "name": "Aurelia Menendez",
    "scores": [
              {
                 "type": "exam",
                 "score": 60.06045071030959
               },
               {
                 "type": "quiz",
                 "score": 52.79790691903873
               },
               {
                "type": "homework",
                "score": 71.76133439165544
               }
             ]
}

可以解釋如下:

/_id,/name,/scores/type,/scores/score
1,"Aurelia Menendez","exam",60.06045071030959
1,"Aurelia Menendez","quiz",52.79790691903873
1,"Aurelia Menendez","homework",71.76133439165544

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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