Python:如何在json字符串值中转义双引号?
我在python中解析json字符串时遇到问题,因为字符串值中有额外的双引号,如Python:如何在json字符串值中转义双引号?,python,json,Python,Json,我在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是
{“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是无效的,但这是我得到的,更改源代码不是一个选项。我目前正在寻找解决这一限制的方法
import re
json = '{"name": "Jack O"Sullivan", "id": "1"}'
fixed = re.sub(r'("[\s\w]*)"([\s\w]*")',r"\1\'\2", json)
我怀疑这会起作用(在的工作示例),它使用以下正则表达式:
("[\s\w]*)"([\s\w]*")
然后将任何内部的“
替换为\”
。只要包含列表有效([\s\w]
),即有效字符串将只包含空格和单词字符。您可能需要为更复杂的名称添加其他可能性
它匹配任何字符串“
正如我在评论中提到的,另一种方法是将json控制字符排除在外。[^{}:,]
。这应该会产生类似的结果,但不会遗漏包含其他字符的名称(例如-
。这个字符串来自哪里?可能更容易修复源代码。ast.literal\u eval()
无法比json更好地对其进行解码。loads()
是,不。字符串中的不带引号的引号在Python中同样无效。您是否100%确定源代码会生成不带引号的引号(这不是试图在Python字符串文本中复制引号而忘记转义的假象)?如果是这样的话,在源代码处修复这个问题就容易多了,因为现在几乎不可能检测到什么引号是值,哪些引号是分隔符。当然,这是完全无效的JSON。嗨,伙计们,是的,我知道JSON是无效的。但是,现在没有选项来更正源代码。因此,我希望手动替换双引号s在字符串中。这些出现在一个人的名字或姓氏中,因此可能有一种方法。耶,这是我需要的。如果名字中有一个&字符,我还需要做一些修改,以包括一些情况,但这对我有效。谢谢!@sfactor另一种方法是在json结构中创建一个排除组:[^{},:]
可能会起作用。我想这可能会使它更具概括性。有什么例子说明它是如何工作的吗?@sfactor它的工作原理完全相同:[^]
是一个否定字符集:它接受任何不在该集中的字符。因此[^abc]
将接受任何不是a
、b
或c
的字符。