问题描述
我有作为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自己解析字符串,但是我一直失败。
解决方法
要清楚,这里的正确解决方案是修复发送该HTTP响应的所有内容;在JSON字符串中包含双引号的正确方法是反斜杠:
{ "key": "value with \"double quotes\" inside" }
任何JSON解析器都应将以上内容视为有效对象。
您不能可靠地解析带有未转义引号的内容,因为您无法分辨出哪些是实际的字符串定界符,哪些是封闭的数据。如果您可以假设引号是平衡的(因此在任何字符串中总是有双引号),则可以构造一个解析器以将其转换为正确的语法,但这不会是基于regex的简单修复。
也就是说,对于您的示例数据,看起来嵌入式引号被空格包围,而实际的定界符引号却没有。因此,您可以尝试通过将 "
(空格引号)替换为 \"
(空格反斜杠引号)和将"
(引号空间)替换为\"
来运行它(反斜杠引号空间),看看是否可行。