如何将嵌套的 json 键收集到线性列表
How to collect nested json keys to a linear list
我正在处理大型嵌套 json 并且需要收集所有 Json 键来列出,
即:
对于 json:
{"taxIncludedAmount":{},"impactingPriceParameter":[{}],"extensions":{"additionalProp1":{}}}}
我想收集列表的密钥,
并添加括号,以便我知道密钥的类型。
所以对于以上 json 我想得到(包括正确的顺序):
eventType
event{}.dataStrategy
event{}.error{}.code
event{}.error{}.characteristics[].name
我设法使用找到的一些代码示例获取所有密钥,
但找不到为 dic 添加括号 {} 和为列表添加括号 [] 的方法。
代码:
def get_keys(d, curr_key=[]):
for k, v in d.items():
if isinstance(v, dict):
yield from get_keys(v, curr_key + [k])
elif isinstance(v, list):
for i in v:
yield from get_keys(i, curr_key + [k])
else:
yield '.'.join(curr_key + [k])
def main():
array_json_keys = [*get_keys(json_data)]
输出:
event.dataStrategy
event.error.characteristics.name
event.error.code
eventType
这是“差不多了,我需要添加方括号({} 表示 dic,[] 表示数组)
此外,我想对其进行排序,以便首先显示第一级对象。
更新:
感谢@blhsing - 它解决了括号,
由于某种原因,它在示例
中跳过了空键
"impactingPriceParameter": [
{}
]
or
"extensions": {
"additionalProp1": {}
}
您可以简单地将 '{}'
或 '[]'
连接到键 k
,具体取决于值的数据类型 v
:
def get_keys(d, curr_key=[]):
for k, v in d.items():
if isinstance(v, dict):
yield from get_keys(v, curr_key + [k + '{}'])
elif isinstance(v, list):
for i in v:
yield from get_keys(i, curr_key + [k + '[]'])
else:
yield '.'.join(curr_key + [k])
我正在处理大型嵌套 json 并且需要收集所有 Json 键来列出, 即:
对于 json:
{"taxIncludedAmount":{},"impactingPriceParameter":[{}],"extensions":{"additionalProp1":{}}}}
我想收集列表的密钥, 并添加括号,以便我知道密钥的类型。 所以对于以上 json 我想得到(包括正确的顺序):
eventType
event{}.dataStrategy
event{}.error{}.code
event{}.error{}.characteristics[].name
我设法使用找到的一些代码示例获取所有密钥, 但找不到为 dic 添加括号 {} 和为列表添加括号 [] 的方法。
代码:
def get_keys(d, curr_key=[]):
for k, v in d.items():
if isinstance(v, dict):
yield from get_keys(v, curr_key + [k])
elif isinstance(v, list):
for i in v:
yield from get_keys(i, curr_key + [k])
else:
yield '.'.join(curr_key + [k])
def main():
array_json_keys = [*get_keys(json_data)]
输出:
event.dataStrategy
event.error.characteristics.name
event.error.code
eventType
这是“差不多了,我需要添加方括号({} 表示 dic,[] 表示数组) 此外,我想对其进行排序,以便首先显示第一级对象。
更新:
感谢@blhsing - 它解决了括号, 由于某种原因,它在示例
中跳过了空键 "impactingPriceParameter": [
{}
]
or
"extensions": {
"additionalProp1": {}
}
您可以简单地将 '{}'
或 '[]'
连接到键 k
,具体取决于值的数据类型 v
:
def get_keys(d, curr_key=[]):
for k, v in d.items():
if isinstance(v, dict):
yield from get_keys(v, curr_key + [k + '{}'])
elif isinstance(v, list):
for i in v:
yield from get_keys(i, curr_key + [k + '[]'])
else:
yield '.'.join(curr_key + [k])