如何扁平化多层/嵌套的JSON?

20 浏览
0 Comments

如何扁平化多层/嵌套的JSON?

我正在试图将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

}

]

}

0