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

问题描述

我有作为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),甚至尝试使用regexp自己解析字符串,但是我一直失败。

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

解决方法

要清楚,这里的正确解决方案是修复发送该HTTP响应的所有内容;在JSON字符串中包含双引号的正确方法是反斜杠:

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

任何JSON解析器都应将以上内容视为有效对象。

您不能可靠地解析带有未转义引号的内容,因为您无法分辨出哪些是实际的字符串定界符,哪些是封闭的数据。如果您可以假设引号是平衡的(因此在任何字符串中总是有双引号),则可以构造一个解析器以将其转换为正确的语法,但这不会是基于regex的简单修复。

也就是说,对于您的示例数据,看起来嵌入式引号被空格包围,而实际的定界符引号却没有。因此,您可以尝试通过将 "(空格引号)替换为 \"(空格反斜杠引号)和将" (引号空间)替换为\" 来运行它(反斜杠引号空间),看看是否可行。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...