如何处理 JSON 值中的双引号?

How to handle double quotes in JSON value?

我收到了作为 HTTP 响应的字符串。不幸的是,该字符串是原始格式,我无法将其转换为 JSON 对象。

示例字符串:

json_string = '{"client_id":8888,"time":null,"questions":{"id":10000,"answered":"true","answer":"The "project" was good, I enjoyed it. Do you plan to repeat it?"},"other":"When is the "project" released?"}'

字符串的问题在于它在某些值(用户答案)中包含双引号。可以包含双引号的值的键并不总是相同的(这里的“answer”和“other”在其他响应中可能不同)。用户答案可以包含任何字符(逗号、括号、双引号、...)。

我尝试使用不同的加载器(json、yaml),我什至尝试自己用正则表达式解析字符串,但我总是失败。

有什么方法可以将此字符串转换为 JSON 对象吗?

明确地说,这里正确的解决方案是修复发送该 HTTP 响应的任何内容;在 JSON 字符串中包含双引号的正确方法是反斜杠:

{ "key": "value with \"double quotes\" inside" }

任何 JSON 解析器都应该接受以上内容作为有效对象。

您无法可靠地解析带有未转义引号的内容,因为您无法分辨哪些是实际的字符串定界符,哪些是包含的数据。如果您可以假设引号是平衡的(因此任何字符串中总是有偶数个引号),那么您可以构建一个解析器将其转换为正确的语法,但这不会是一个简单的 regex-based修复。

就是说,对于您的样本数据,嵌入的引号似乎被空格包围,而实际的分隔符引号却没有。因此,您可以通过将 " (space-quote) 替换为 \" (space-backslash-quote) 和 " (quote-space) 与 \" (反斜杠-quote-space) 并查看是否有效。