我在python中解析json字符串时遇到问题,因为字符串值中有额外的双引号,如{"name": "Jack O"Sullivan", "id": "1"}
我试图将其转换为列表以进行进一步评估,如下所示:
import ast
js = '{"name": "Jack O"Sullivan", "id": "1"}'
ast.literal_eval(js).values()
如何将json字符串更改为此"Jack O\'Sullivan"
,以便正确评估。
编辑只是强调我知道json无效,但这就是我所拥有的并且更改源不是一个选项。我现在正在努力解决这个问题。
答案 0 :(得分:2)
import re
json = '{"name": "Jack O"Sullivan", "id": "1"}'
fixed = re.sub(r'("[\s\w]*)"([\s\w]*")',r"\1\'\2", json)
我怀疑这会有用(repl.it处的工作示例),它使用以下正则表达式:
("[\s\w]*)"([\s\w]*")
然后用"
替换任何内部\'
。只要包含列表有效([\s\w]
),这将起作用,即有效字符串仅包含空格和单词字符。您可能需要为更复杂的名称添加其他可能性。
它匹配任何字符串"<alpha/space>"<alpha/space>"
,然后使用捕获组和反向引用将其替换为"<whatwasbefore>\'<whatwasafter>"
。
请参阅regex101
上的示例正如我在评论中提到的,替代方法是使其排除json控制字符[^{}:,]
。这应该会产生类似的结果,但不会遗漏包含其他字符的名称(例如-
)。