Python 如何收集线性列表中的嵌套json键
我正在处理大型嵌套json,需要收集所有要列出的json键, i、 e: 对于json:Python 如何收集线性列表中的嵌套json键,python,json,nested,key,Python,Json,Nested,Key,我正在处理大型嵌套json,需要收集所有要列出的json键, i、 e: 对于json: {"taxIncludedAmount":{},"impactingPriceParameter":[{}],"extensions":{"additionalProp1":{}}}} 我想收集列表的钥匙, 加上括号,这样我就知道钥匙的类型了。 因此,对于上述json,我希望得到(包括正确的顺序): 我使用找到的一些代码示例
{"taxIncludedAmount":{},"impactingPriceParameter":[{}],"extensions":{"additionalProp1":{}}}}
我想收集列表的钥匙,
加上括号,这样我就知道钥匙的类型了。
因此,对于上述json,我希望得到(包括正确的顺序):
我使用找到的一些代码示例获取所有密钥,
但是很难找到一种方法来为dic添加括号{},为list添加括号[]
代码:
输出:
event.dataStrategy
event.error.characteristics.name
event.error.code
eventType
这是“差不多了,我需要添加括号({}表示dic,[]表示数组)
此外,我想得到它的排序,所以第一级的对象将首先显示
更新:
谢谢@blhsing-它解决了括号,
出于某种原因,它跳过了示例中的空键
"impactingPriceParameter": [
{}
]
or
"extensions": {
"additionalProp1": {}
}
根据值
v
的数据类型,您可以简单地将'{}'
或'[]'
连接到键k
:
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])
非常感谢,非常准确:)对于排序部分,是否有方法对输出进行排序,以便最高级别的键首先显示?不客气。要首先生成最高级别的键,应使用广度优先搜索(使用基于队列的实现),而不是深度优先搜索(使用递归)。请先尝试一下,如果遇到问题,请问一个新问题。如果您想用一种简单(但效率较低)的方法在DFS之后对列表进行排序,只需按每个字符串中的点数对列表进行排序。使用bfs意味着我首先需要对dict键进行排序,然后调用get_keys函数?
"impactingPriceParameter": [
{}
]
or
"extensions": {
"additionalProp1": {}
}
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])