Python 如何在深度嵌套的json文件中搜索所有出现的键?
我希望能够使用json文件中的一个键来查找json文件中出现的所有特定json对象。例如,如果我有以下json块:Python 如何在深度嵌套的json文件中搜索所有出现的键?,python,json,parsing,Python,Json,Parsing,我希望能够使用json文件中的一个键来查找json文件中出现的所有特定json对象。例如,如果我有以下json块: { "FNMIP": 1, "FNMIT": 0, "FNMP": { "DP": { "DT": 0, "UF": true,
{
"FNMIP": 1,
"FNMIT": 0,
"FNMP": {
"DP": {
"DT": 0,
"UF": true,
"DF": "yyyyMMdd"
},
"FP": {
"FE": null
}
},
"IE": true,
"$": "PMF"
}
我想搜索包含此键的所有json块,然后应用某种逻辑将其替换为另一个json对象。我不知道如何在Python中执行这些操作,因为我是Python新手。如果我理解正确,您希望递归遍历嵌套的
dict
s,对于任何与特定值匹配的值,将其替换为其他值。这样做:
def recursive_replace(data,match,repl):
for k,v in data.items():
if v == match:
data[k] = repl #replace the matched value
elif isinstance(v,dict):
recursive_replace(v,match,repl)
然后您可以将数据转换回json
要测试数据中是否存在“$”
键,可以使用中的操作符:
def recursive_replace(data,repl):
for k,v in data.items():
if not isinstance(v,dict):
continue
elif "$" in v:
data[k] = repl
else:
recursive_replace(v,repl)
那么,您想进行DFS搜索,当您找到匹配项时,将该对象附加到数组中?你只需要递归地遍历它。我想做深度优先搜索,我想做的是做一个DFS,当我发现该对象时,用一个新对象替换它,然后继续搜索以查找更多该类型的对象。你能提供一个示例数据和修改吗?你可能想研究一下,问题是当我看到像上面那样的json对象,如果“$”:“PMF”,那么就用一个新对象替换它?它是一个静态值,还是基于数据在全局中的位置确定的?您希望像{“tadhg”:{“$”:“A”},“Ankit”:{“$”:“B”}}
这样的数据用结构中一级以上的键替换“$”键吗?因此,新数据类似于{“tadhg”:{“tadhg”:“A”},“Ankit”:{“Ankit”:“B”}
No,因此如果我找到带有“$”:“A”的对象,那么我想用一个新字典替换可以作为字典的父对象,其中“$”是一个键,因此如果结构类似于{“X”:“S”,“V”:“{“$”:PFM},那么就用“{”P”:“A”替换它例如,我在答案中添加了,但我仍然不清楚这是否是你想要的。重置价值是如何定义的?如果你简单地用一个字典替换所有的值,它们最终都会成为对同一个对象的引用,你会遇到如下问题