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是

我在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是无效的,但这是我得到的,更改源代码不是一个选项。我目前正在寻找解决这一限制的方法

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
的字符。