2017-09-23 93 views
0

我試圖寫CSV產生嵌套dictionnaries列表如下一個JSON:解壓的嵌套字典的列表,並轉換爲CSV

[{'spam': 'xxxx', 
    'egg': 'yyyy', 
    'line_items': [{'description': 'hhh', 
        'amount': 'iii'}, 
       {'description': 'jjj', 
        'amount': 'kkk'}], 
    'bacon': 'zzzz'}] 

我寫了下面的代碼(即仍然很新, Python)的:

import csv 

jsonData = json.loads(r.text) 
keys = list(jsonData[0].keys()) 
with open(filePathCsv, 'w') as csvfile: 
    w = csv.DictWriter(csvfile, keys) 
    w.writeheader() 
    w.writerows(jsonData) 

這將產生以下:

CSV output

我需要做到的是:

Expected output

每個嵌套行項目產生一個新行。

我想實現這一目標的最好辦法就是解開我的嵌套dictionnaries的列表dictionnaries的簡單列表,就像這樣:

[{'spam': 'xxxx', 
    'egg': 'yyyy', 
    'description': 'hhh', 
    'amount': 'iii', 
    'bacon': 'zzzz'}, 
{'spam': 'xxxx', 
    'egg': 'yyyy', 
    'description': 'jjj', 
    'amount': 'kkk', 
    'bacon': 'zzzz'}] 

但我很茫然就如何實現這一目標。

或者也許有另一種方法來實現我的預期結果?

+0

所以是你的問題解決了嗎? –

回答

1

或者也許有另一種方法來實現我的預期結果?

如果使用pandas,有一個一行爲此,使用json_normalize

import pandas as pd 

data = [{'spam': 'xxxx', 
    'egg': 'yyyy', 
    'line_items': [{'description': 'hhh', 
        'amount': 'iii'}, 
       {'description': 'jjj', 
        'amount': 'kkk'}], 
    'bacon': 'zzzz'}] 

df = pd.io.json.json_normalize(data, record_path=['line_items'], 
           meta=['spam', 'egg','bacon']) 
df 

    amount description egg spam bacon 
0 iii   hhh yyyy xxxx zzzz 
1 kkk   jjj yyyy xxxx zzzz 

df.to_csv('out.csv') 
+0

謝謝@COLDSPEED!它確實有效!你救了我幾根灰頭髮!後續的問題,如果允許的話:其他一些字段有一個字典,如下所示: {'spam':{'match':'139442'}, 'bacon':{'formatted':'2017-08-26 '}, 'egg':{'iso8601':'2017-08-29','match':'29 -AUG-17'} 有沒有辦法從字典中提取/ one值爲分配給「垃圾郵件」,「培根」和「蛋」? 我已經通過熊貓DataFrame文檔,但找不到任何東西。 無論如何,再次感謝! – Nic0

+0

@ Nic0如果你的問題已經解決...... [如果你能接受我的回答,會很好](https://stackoverflow.com/help/someone-answers)。而且,爲了回答你的問題,我不相信有一個簡單的方法可以做到這一點。你想用熊貓標籤打開一個新問題嗎? –