当前位置: 首页 > 面试题库 >

Python:如何在json字符串值内转义双引号?

简学文
2023-03-14
问题内容

我在python中解析json字符串时遇到问题,因为在字符串值中有多余的双引号,例如 {"name": "Jack O"Sullivan", "id": "1"}

我正在尝试将其转换为列表,以便进一步评估,如下所示:

import ast
js = '{"name": "Jack O"Sullivan", "id": "1"}'
ast.literal_eval(js).values()

我如何将json字符串更改为this "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)

我怀疑这会工作(在repl.it上的工作示例),它使用以下正则表达式

("[\s\w]*)"([\s\w]*")

然后更换任何内"\'。只要包含列表有效(即[\s\w]),此方法就起作用,即有效字符串仅包含空格和单词字符。您可能需要为更复杂的名称添加其他可能性。

它匹配任何字符串"<alpha/space>"<alpha/space>",然后"<whatwasbefore>\'<whatwasafter>"使用捕获组和反向引用替换它。

请参阅regex101上的示例

正如我在评论中提到的,替代方法是使其排除json控制字符[^{}:,]。这应该会产生相似的结果,但不会遗漏其中包含其他字符的名称(例如-,)。



 类似资料:
  • 问题内容: 我正在尝试显示双引号,但它显示的是反斜杠之一: 在html中呈现时,显示为。正确的方法是什么? 问题答案: 试试这个: (在引号前只需一个反斜杠())。

  • 我想显示双引号,但它显示了一个反斜杠: 在html中呈现时,它显示为。正确的方法是什么?

  • 问题内容: 手动创建JSON数据时,应如何转义字符串字段?我应该用什么样的Apache Commons Lang中的,或者我应该使用? 问题是,当我使用时,它不会转义引号,并且当我将整个字符串包装在一对s中时,将生成格式错误的JSON。 问题答案: 理想情况下, 找到一种使用您的语言的JSON库 ,您可以向该 库 提供一些适当的数据结构, 并使它担心如何转义 。它会让您保持头脑清醒。如果出于某种原

  • 问题内容: 如何在Python中用反斜杠和双引号替换双引号? 我想得到以下内容: 问题答案: 当您只要求’s’时,它会为您转义\,在打印时,您会看到字符串处于更“原始”状态。所以现在

  • 问题内容: 我通常使用以下代码来解析JSON字符串: 当数据如下所示时,效果很好: 突然之间,当输入其他数据时,我遇到了问题。解析失败,并且在调试时,我发现该字符串如下所示: 显然,我得到双引号内的JSON字符串。2个简短的问题:1)这是否正常,并且JSONObject应该能够解析它吗?2)如果不是,建议的处理方式是什么? 问题答案: 这似乎是JSON生成中的错误。JSON实际上应该在此处引发解析

  • 问题内容: 手动创建数据时,应如何转义字符串字段?我应该用什么样的中的或者我应该使用 问题是,当我使用时,它不会转义引号,并且当我将整个字符串包装在一对s中时,将生成格式错误的JSON。 问题答案: 理想情况下,找到一种使用你的语言的JSON库,你可以向该库提供一些适当的数据结构,并使它担心如何转义。它会让你保持头脑清醒。如果出于某种原因你没有使用你的语言的库,或者你不想使用一个库(我不建议这样做