包含未转义双引号的元素的JSON字符串

时间:2015-07-02 21:39:01

标签: python regex json

尝试从AJAX请求解析JSON时,返回的字符串包含无效的JSON。

虽然最佳做法是将服务器更改为使用有效的JSON进行回复,如多个相关答案所示,但这不是一个选项。

尝试使用python解决这个问题,我查看了正则表达式。

主要问题是如下元素(我目前用作测试字符串:

begin
 admin.f_partition_manager_2;
end;

我目前使用以下代码:

testStr = '{"KEY1":"THIS IS "AN" ELEMENT","KEY2":"""THIS IS ANOTHER "ELEMENT""}'

成功非常有限。

如果我使用C,我会解析字符串,并简单地转义元素中的所有双引号(即所有双引号之间的前缀为[:{},])

必须有一种pythonic方式来解析,而不是诉诸for循环并展望未来,并保留历史。

编辑:

假设字符串不包含:[:{}] 并且还假设未转义的双引号仅在值内,而不在键中, 然后我假设以下(或类似的东西应该解决问题:

jsonString = re.sub(r'(?<=\w)\"(?=[^\(\:\}\,])','\\"',testStr)
jsonString = re.sub(r'\"\"(?![,}:])','\"\\\"',jsonString)

但它仍然无效。

1 个答案:

答案 0 :(得分:2)

似乎我需要休息才能解决这个问题。

以下正则表达式似乎只替换元素字符串中包含的双引号。 (根据我在问题中陈述的假设)

output = re.sub(r'(?<![\[\:\{\,])\"(?![\:\}\,])','\\\"', stringName)

我在这里创建了一个沙箱:https://repl.it/vNK

示例输出:

Original String:
{"KEY1":"THIS IS "AN" ELEMENT","KEY2":"""THIS IS ANOTHER "ELEMENT""}

Modified String:
{"KEY1":"THIS IS \"AN\" ELEMENT","KEY2":"\"\"THIS IS ANOTHER \"ELEMENT\""}

Parsed JSON:
{
    "KEY1": "THIS IS \"AN\" ELEMENT",
    "KEY2": "\"\"THIS IS ANOTHER \"ELEMENT\""
}

欢迎任何建议。