我有一个非常大的 json 文件,其中有几个嵌套键。从我到目前为止读到的内容来看,如果您这样做:
x = json.loads(data)
Python 会将其解释为字典(如果我错了,请纠正我)。 json 文件中的第四层嵌套包含几个由 ID 号命名的元素,并且所有这些元素都包含一个称为“children”的元素,如下所示:
{"level1":
{"level2":
{"level3":
{"ID1":
{"children": [1,2,3,4,5]}
}
{"ID2":
{"children": []}
}
{"ID3":
{"children": [6,7,8,9,10]}
}
}
}
}
我需要做的是将所有 "children"
元素中的所有项目替换为空,意思是 "children": []
如果 ID 号在一个名为 new_ids
的列表,然后将其转换回 json。我已经阅读这个主题几个小时了,但我还没有找到任何类似的内容来尝试帮助自己。
我正在运行 Python 3.3.3。任何想法都将不胜感激!!
谢谢!!
编辑
列表:
new_ids=["ID1","ID3"]
预期结果:
{"level1":
{"level2":
{"level3":
{"ID1":
{"children": []}
}
{"ID2":
{"children": []}
}
{"ID3":
{"children": []}
}
}
}
}
最佳答案
首先,您的 JSON 无效。我假设你想要这个:
{"level1":
{"level2":
{"level3":
{
"ID1":{"children": [1,2,3,4,5]},
"ID2":{"children": []},
"ID3":{"children": [6,7,8,9,10]}
}
}
}
}
现在,将数据作为字典加载:
>>> with open('file', 'r') as f:
... x = json.load(f)
...
>>> x
{u'level1': {u'level2': {u'level3': {u'ID2': {u'children': []}, u'ID3': {u'children': [6, 7, 8, 9, 10]}, u'ID1': {u'children': [1, 2, 3, 4, 5]}}}}}
现在您可以循环遍历 x['level1']['level2']['level3']
中的键并检查它们是否在您的 new_ids
中。
>>> new_ids=["ID1","ID3"]
>>> for key in x['level1']['level2']['level3']:
... if key in new_ids:
... x['level1']['level2']['level3'][key]['children'] = []
...
>>> x
{u'level1': {u'level2': {u'level3': {u'ID2': {u'children': []}, u'ID3': {u'children': []}, u'ID1': {u'children': []}}}}}
您现在可以将 x
写回文件,如下所示:
with open('myfile', 'w') as f:
f.write(json.dumps(x))
如果您的 new_ids
列表很大,请考虑将其设为集
。
关于python - 根据条件替换Json字符串中的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24665403/