我正在尝试写一个生成嵌套字典列表的JSON,如下所示:
[{'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)
这会产生以下结果:
我需要做的是:
其中每个嵌套的订单项都会生成一个新行。
我想最好的方法是将我的嵌套字典列表解压缩到一个简单的字典列表中,如下所示:
[{'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')