2016-09-26 120 views
0

我有如下所示的格式的多個單個JSON對象非常大的JSON文件。我試圖將其轉換爲CSV,以便每行都是JSON對象中的外部id /名稱/字母表和一組轉換:id/name/alphabet。對於單個JSON對象中的所有id /名稱/字母集合,都會重複此操作。因此,從下面的對象中,應該創建2行,其中第一行是(外部)id/name/alphabet和第一個id /名稱/轉換字母表。第二行再次是(外部)id/name/alphabet,現在是轉換的第二個id /名稱/字母表。JSON來CSV轉換

重要的一點是,該文件中的某些對象可以有50/60轉換ID /名稱/拼音對向上。

我到目前爲止所嘗試的是首先扁平化JSON對象,導致像conversion_id_0和conversion_id_1等關鍵字......所以我可以將外部映射爲其始終常量,但我不確定如何映射每個對應的數字集成爲一個單獨的行。

任何幫助或洞察力將不勝感激!

[ 
    { 
     "alphabet": "ABCDEFGHIJKL", 
     "conversion": [ 
      { 
       "alphabet": "BCDEFGHIJKL", 
       "id": 18589260, 
       "name": [ 
        "yy" 
       ] 
      }, 
      { 
       "alphabet": "EFGHIJEFGHIJ", 
       "id": 18056632, 
       "name": [ 
        "zx", 
        "cd" 
       ] 
      } 
     ], 
     "id": 23929934, 
     "name": [ 
      "x", 
      "y" 
     ] 
    } 
] 
+0

你嘗試過什麼?社區不是爲了解決任務,當你遇到困難或耗盡「燃料」時需要幫助 – sb0709

+1

儘管你已經用廣義的術語說了你到目前爲止所嘗試的內容,但最好是發佈你目前爲止的代碼並試圖解釋它在哪裏破壞....說了這麼多之後,可以用很多方式彈出字符串的最後一個字符,在寫入行時可以用作行索引。例如my_string [-1] –

+0

檢查驗證碼:http://stackoverflow.com/a/1872081/2027457 – sb0709

回答

0

你的問題不清楚究竟從輸入JSON數據到CSV文件的行映射,所以我猜對應該發生什麼時,有與內部或外部對象相關聯的不止一個「名」 。

無論如何,希望下面將給你如何解決這樣問題的總體思路。

import csv 

objects = [ 
    { 
     "alphabet": "ABCDEFGHIJKL", 
     "id": 23929934, 
     "name": [ 
      "x", 
      "y" 
     ], 
     "conversion": [ 
      { 
       "alphabet": "BCDEFGHIJKL", 
       "id": 18589260, 
       "name": [ 
        "yy" 
       ] 
      }, 
      { 
       "alphabet": "EFGHIJEFGHIJ", 
       "id": 18056632, 
       "name": [ 
        "zx", 
        "cd" 
       ] 
      } 
     ], 
    } 
] 

with open('converted_json.csv', 'wb') as outfile: 
    def group(item): 
     return [item["id"], item["alphabet"], ' '.join(item["name"])] 

    writer = csv.writer(outfile, quoting=csv.QUOTE_NONNUMERIC) 
    for obj in objects: 
     outer = group(obj) 
     for conversion in obj["conversion"]: 
      inner = group(conversion) 
      writer.writerow(outer + inner) 

CSV文件的內容而產生:

23929934,"ABCDEFGHIJKL","x y",18589260,"BCDEFGHIJKL","yy" 
23929934,"ABCDEFGHIJKL","x y",18056632,"EFGHIJEFGHIJ","zx cd" 
+0

謝謝!這正是我正在尋找。我不認爲保持json結構的原樣,只是訪問「轉換」內的每個對象。我試圖完成這在平坦了json後遇到了一些麻煩。 – lucas305

+0

不客氣,請參閱[_當某人回答我的問題時該怎麼辦?_](http://stackoverflow.com/help/someone-answers) – martineau