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

//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 将无法解析。我该如何处理这种情况?

有帮助吗?

解决方案

好了,终于,JSON的解析使用相同的eval,所以这时候,你给他们不便没有区别。用不正确的语法。在这种情况下,你必须正确地逃避你的报价在PHP中,然后逃离他们和他们的逃逸与json_encode斜杠

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

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

此应于客户端JS工作(如果我做没有错字)。

其他提示

未逸出的Javascript其字符串和JSON反转义它们。 第一串('{"result": ["lunch", "\"Show\""] }')由JSON分析器所看到 {"result": ["lunch", ""Show""] },因为\"在javascript装置",但不退出双引号的字符串。

在第二串'{"result": ["lunch", "\\\"Show\\\""] }'获取第一非转义到{"result": ["lunch", "\"Show\""] }(并且正确由JSON转义)。

我想,那应该'{"result": ["lunch", "\\"Show\\""] }'工作太。

此问题是由双折的字符串转义机制引起的:一个来自JS和一个来自JSON

反斜线字符与另一个字符以下组合的组合用于表示的一个字符不是在字符串中另有表示的。 '' \\ '' 代表 '\' 等

此逃逸机制发生JSON.parse()之前的工作原理。

例如,

var parsedObj = JSON.parse('{"sentence": "It is one backslash(\\\\)"}');
console.log(parsedObj.sentence);
>>>"It is one backslash(\)"

从字符串发生器的角度来看,它的传递四个齿隙 '\' 进入的JavaScript解释器。

从JavaScript解释器的角度来看,它inteprets的有两个齿隙(\)作为每个 '\\' 序列将被解释为一个 '\'。

从JSON解析器的角度来看,它的接收两个齿隙(\\)和JSON字符串转义规则将其解析为一个单个“\”作为输出结果。

解释你第一代码:

var testJson = '{"result": ["lunch", "\"Show\""] }';
//The real string after sequence escaping in to JS is
//'{"result": ["lunch", ""Show""] }' 
//which is passed into the JSON.parse.
//Thus, it breaks the JSON grammar and generates an error
var tags = JSON.parse(testJson);  
alert (tags.result[1]);

文档

  

JSON_HEX_APOS(整数)的所有'被转换为\ u0027,点击   JSON_HEX_QUOT(整数)的所有“被转换为\ u0022

json_encode()有两个参数,值和选项。因此,尝试

json_encode($result, JSON_HEX_QUOT); // or
json_encode($result, JSON_HEX_QUOT | JSON_HEX_APOS);

我没有尝试这样做虽然。

关闭magic_quotes_gpc中的的php.ini

PHP来JavaScript对象(PHP> = 5.3.0)

var storesLocations = JSON.parse('<?php echo addslashes(json_encode($storesLocations,JSON_HEX_APOS | JSON_HEX_QUOT)) ?>');

如果添加标准 C 转义符,则 JSON.parse 将转换序列如 \" 进入 ", \\ 进入 \, \n 换行等

'foo\\bar\nbaz"' === JSON.parse('"foo\\\\bar\\nbaz\\""')

以我们的项目为例:

原始字符串 ""{\"lat\":28.4594965,\"lng\":77.0266383}""

传递到之后 JSON.parse()

"{"lat":28.4594965,"lng":77.0266383}"

上 2ND 传递给 JSON.parse()

{lat: 28.4594965, lng: 77.0266383}

请注意 JSON.parse() 删除转义字符而不是转换 stringobject.

删除转义字符后,字符串到对象的转换就开始工作了。

这是演示:

while (typeof p1 != 'object') {
  p1 = JSON.parse(p1);
  pass++;
  console.log('On pass ', pass, p1);
}

这可能会帮助:

<?php
$json = '{"result": ["lunch", "\"Show\""] }';
echo addslashes(json_encode($json));
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top