尝试从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)
但它仍然无效。
答案 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\""
}
欢迎任何建议。