<p>好吧,我希望我找到你了<a href="https://stackoverflow.com/questions/55713877/recursively-iterate-through-a-nested-dict-with-list-and-replace-matched-values">With reference to this question</a>,我修改了答案,使它适合您。希望这就是你想要的:</p>
<pre><code>import json
data = {
"library": [
{
"_type": "Host",
"parameters": '{"property1":"value1","property2":"value2"}',
"superclassOf": [
{
"_type": "LinuxHost",
"superclassOf": [
{
"_type": "Ubuntu",
"superclassOf": [
{
"_type": "Ubuntu1604",
"parameters": '{"property1":"value1","property2":"value2"}'
}
]
}
]
}
]
}
]
}
# if you want to modify a specific key's value where you only know the key
def replace(data, key_match, repl):
if isinstance(data, dict):
return {k: replace((v if k != key_match else repl), key_match, repl) for k, v in data.items()}
elif isinstance(data, list):
return [replace(i, key_match, repl) for i in data]
elif isinstance(data, str):
try:
data = json.loads(data)
return replace(data, key_match, repl)
except ValueError:
return data
else:
return data
print(replace(data, "property1", "Modified"))
# {'library': [{'_type': 'Host', 'parameters': {'property1': 'Modified', 'property2': 'value2'}, 'superclassOf': [{'_type': 'LinuxHost', 'superclassOf': [{'_type': 'Ubuntu', 'superclassOf': [{'_type': 'Ubuntu1604', 'parameters': {'property1': 'Modified', 'property2': 'value2'}}]}]}]}]}
</code></pre>
<p><strong>编辑</strong></p>
<p>如果您只想转换json</p>
<pre><code>def convertJSON(data):
if isinstance(data, dict):
return {k: convertJSON(v) for k, v in data.items()}
elif isinstance(data, list):
return [convertJSON(i) for i in data]
elif isinstance(data, str):
try:
data = json.loads(data)
return convertJSON(data)
except ValueError:
return data
else:
return data
print(convertJSON(data))
# {'library': [{'_type': 'Host', 'parameters': {'property1': 'value1', 'property2': 'value2'}, 'superclassOf': [{'_type': 'LinuxHost', 'superclassOf': [{'_type': 'Ubuntu', 'superclassOf': [{'_type': 'Ubuntu1604', 'parameters': {'property1': 'value1', 'property2': 'value2'}}]}]}]}]}
</code></pre>