【发布时间】:2018-12-23 21:08:21
【问题描述】:
我正在尝试将 JSON 转换为 CSV 文件,以便进行进一步分析。我的结构的问题是,当我转换我的 JSON 文件时,我有很多嵌套的字典/列表。
我尝试使用 pandas json_normalize(),但它只压平了第一级。
import json
import pandas as pd
from pandas.io.json import json_normalize
from cs import CloudStack
api_key = xxxx
secret = xxxx
endpoint = xxxx
cs = CloudStack(endpoint=endpoint,
key=api_key,
secret=secret)
virtual_machines = cs.virtMach()
test = json_normalize(virtual_machines["virtualmachine"])
test.to_csv("test.csv", sep="|", index=False)
知道如何整理整个 JSON 文件,以便为单个(在本例中为虚拟机)条目创建 CSV 文件的单行输入吗?我尝试了这里发布的几个解决方案,但我的结果总是只有第一级被压平。
这是示例 JSON(在这种情况下,我仍然得到 JSON 格式的“securitygroup”和“nic”输出:
{
"count": 13,
"virtualmachine": [
{
"id": "1082e2ed-ff66-40b1-a41b-26061afd4a0b",
"name": "test-2",
"displayname": "test-2",
"securitygroup": [
{
"id": "9e649fbc-3e64-4395-9629-5e1215b34e58",
"name": "test",
"tags": []
}
],
"nic": [
{
"id": "79568b14-b377-4d4f-b024-87dc22492b8e",
"networkid": "05c0e278-7ab4-4a6d-aa9c-3158620b6471"
},
{
"id": "3d7f2818-1f19-46e7-aa98-956526c5b1ad",
"networkid": "b4648cfd-0795-43fc-9e50-6ee9ddefc5bd"
"traffictype": "Guest"
}
],
"hypervisor": "KVM",
"affinitygroup": [],
"isdynamicallyscalable": false
}
]
}
【问题讨论】:
-
有很好的例子here - 那里提到的 flatten json 函数应该完全符合您的要求。让我知道这是否有帮助
-
您好,这个链接确实很有帮助。部分解决了我的问题,尽管现在一切都变平了,而不仅仅是内部字典。但是我在那里也发现了完全相同的问题,这导致了 json_normalization() 的文档,它表明您可以指定导出深度。 link
-
是的
json_normalize非常有用!试一试,告诉我们进展如何。 -
所以基本上这行得通 - 我使用了 json_normalization(),我在上面的链接中定义了输出结构。再次感谢 gyx 的所有帮助。您也可以将其发布为答案,以便我将其标记为解决方案吗?
-
太好了。不,您可以发布自己的答案(因为您已回答)并将其标记为答案:)