我正在从 json 字符串中的“text”键中提取值,但可以看到递归调用发生了两次并获得了输出两次。添加了多个打印语句以用于调试目的。
在调试重复调用两次的 process_data 方法时需要帮助。
def process_data(obj, content):
# texts = []
print("inside process data", obj)
if isinstance(obj, dict):
for key, value in obj.items():
print("key",key)
if key == "textValue":
print("processing textValue")
textval_str = json.dumps(value)
textval = json.loads(textval_str)
print("textVal", textval)
process_data(textval, content)
if key == "text":
print("processing text", value)
content.append(value)
return
else:
process_data(value, content)
elif isinstance(obj, list):
print("list")
for item in obj:
process_data(item, content)
return content
def from_adf(x):
try:
if x is not None:
cont = []
adf_text = process_data(x, cont)
print(len(cont))
return adf_text
else:
return None
except Exception as e:
print(e)
return x
if __name__ == '__main__':
print(1)
json_str = '''{"textValue": "{\"type\":null,\"content\":[{\"content\":[{\"type\":\"text\",\"text\":\"PAAT \"}]}]}"}'''
op = json_str.replace('"{', '{').replace('}"', '}').replace('\\"', '\\\\\\"')
opls = json.loads(op, strict=False)
output = from_adf(opls)
print(output)
除了
json_str
不是有效的 JSON 之外(可能是您在发表这篇文章时误解了转义在字符串文字中的工作原理),重复调用的问题位于您的 if..else
链中:
if key == "textValue":
...
if key == "text":
...
else:
这意味着当第一个
else
块被执行时,最后一个if
块也将被执行。这不是你想要的。更改为:
if key == "textValue":
...
elif key == "text":
...
else: