<p>您可以使用<code>json.loads</code>将json字符串转换为dict。浏览dict的每个元素,检查它是dict类型还是list或string类型,并相应地处理每个类型</p>
<pre><code>import json
def process_str(s):
if s and s[0]=='{' and s[-1]=='}':
return json.loads(s)
return s
def process_list_or_dict(ld):
for k,v in enumerate(ld) if isinstance(ld, list) else ld.items():
if isinstance(v, str):
ld[k] = process_str(v)
elif isinstance(v, (list, dict)):
process_list_or_dict(v)
</code></pre>
<p><strong>示例</strong></p>
<pre><code>dct = {'library': [{'_type': 'Host', 'parameters': '{"property1":"value1","property2":"value2"}', 'superclassOf': [{'_type': 'LinuxHost', 'superclassOf': [{'_type': 'Ubuntu', 'superclassOf': [{'_type': 'Ubuntu1604', 'parameters': '{"property3":"value3","property4":"value4"}'}]}]}]}]}
process_list_or_dict(dct)
print(json.dumps(dct, indent=4))
</code></pre>
<p><strong>输出</strong></p>
<pre><code>{
"library": [
{
"_type": "Host",
"parameters": {
"property1": "value1",
"property2": "value2"
},
"superclassOf": [
{
"_type": "LinuxHost",
"superclassOf": [
{
"_type": "Ubuntu",
"superclassOf": [
{
"_type": "Ubuntu1604",
"parameters": {
"property3": "value3",
"property4": "value4"
}
}
]
}
]
}
]
}
]
}
</code></pre>