全部
我试图通过以下方式对一些json进行检查和格式化,来改变它的外观:
1. flatten all of the fields lists
2. Then remove the fields lists and replace them with the name : flatten list
示例:
{
"name": "",
"fields": [{
"name": "keys",
"fields": [{
"node-name": "0/0/CPU0"
},
{
"interface-name": "TenGigE0/0/0/47"
},
{
"device-id": "ASR9K-H1902.corp.cisco.com"
}
]
},
{
"name": "content",
"fields": [{
"name": "lldp-neighbor",
"fields": [{
"receiving-interface-name": "TenGigE0/0/0/47"
},
{
"receiving-parent-interface-name": "Bundle-Ether403"
},
{
"device-id": "ASR9K-H1902.corp.cisco.com"
},
{
"chassis-id": "78ba.f975.a64f"
},
{
"port-id-detail": "Te0/1/0/4/0"
},
{
"header-version": 0
},
{
"hold-time": 120
},
{
"enabled-capabilities": "R"
},
{
"platform": ""
}
]
}]
}
]
}
会变成:
{
"": [{
"keys": [{
"node-name": "0/0/CPU0",
"interface-name": "TenGigE0/0/0/47",
"device-id": "ASR9K-H1902.corp.cisco.com"
}]
},
{
"content": [{
"lldp-neighbor": [{
"receiving-interface-name": "TenGigE0/0/0/47",
"receiving-parent-interface-name": "Bundle-Ether403",
"device-id": "ASR9K-H1902.corp.cisco.com",
"chassis-id": "78ba.f975.a64f",
"port-id-detail": "Te0/1/0/4/0",
"header-version": 0,
"hold-time": 120,
"enabled-capabilities": "R",
"platform": ""
}]
}]
}
]
}
我尝试了以下方法使列表扁平化:
def _flatten_fields(self, fields_list):
c = {}
for b in [d for d in fields_list if bool(d)]:
c.update(b)
return c
这似乎是可行的,但我无法找到一种方法进入子级别使用递归,我保存所有扁平列表和名称到一个新的字典,有没有办法做到这一点,只是操纵原来的字典?你知道吗
这对您提供的示例有效:
输出
它没有在您期望的输出中显示额外的
list
层,但我认为您不需要这些。你知道吗这对您提供的示例有效:
但是它在字典列表上工作,所以您应该像
flatten_fields([data])[0]
那样调用它。你知道吗输出为:
相关问题 更多 >
编程相关推荐