带双引号的 json 解析错误

2022-08-30 10:11:53

即使转义,双引号也会引发解析错误。
看看下面的代码

//parse the json in javascript  
var testJson = '{"result": ["lunch", "\"Show\""] }';  
var tags = JSON.parse(testJson);  
alert (tags.result[1]);

这是由于双引号(已经转义)而引发解析错误。
甚至在这里也行不通。
但是,如果我用这样的双斜杠来逃避它:eval()

var result = '{"result": ["lunch", "\\"Show\\""] }';  
var tags = JSON.parse(result);  
alert (tags.result[1]);

然后它工作正常。
为什么我们需要在javascript中使用双斜杠?问题是PHP函数用单个斜杠转义双引号(如:),这将无法解析。我该如何处理这种情况?json_encode()\"show\"JSON.parse


答案 1

Javascript 取消了其字符串,而 json 也取消了它们的框架。第一个字符串 () 被 json 解析器视为 ,因为在 javascript 中意味着 ,但不退出双引号字符串。'{"result": ["lunch", "\"Show\""] }'{"result": ["lunch", ""Show""] }\""

第二个字符串首先被解转为(并且由 json 正确取消转义)。'{"result": ["lunch", "\\\"Show\\\""] }'{"result": ["lunch", "\"Show\""] }

我认为,这也应该有效。'{"result": ["lunch", "\\"Show\\""] }'


答案 2

好吧,最后,JSON的解析使用相同的eval,所以当你给它们smth时没有区别。语法不正确。在这种情况下,您必须在php中正确转义引号,然后用json_encode

<?php
    $json = '{"result": ["lunch", "\"Show\""] }';
    echo json_encode($json);
?>

OUTPUT: "{\"result\": [\"lunch\", \"\\\"Show\\\"\"] }"

这应该适用于客户端JS(如果我没有打错字的话)。