json用双引号parsing错误

双引号即使转义抛出parsing错误。
看下面的代码

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

这是抛出parsing错误,因为双引号(已经逃脱)。
即使是eval()也不能在这里工作。
但是,如果我用这样的双斜杠逃避它:

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

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

那么,最后,JSON的parsing使用相同的评价,所以当你给他们没有什么差别。 语法不正确。 在这种情况下,你必须在php中正确地转义你的引号,然后用json_encode转义它们和转义斜杠

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

这应该在客户端JS(如果我没有input错误)。

Javascript忽略了它的string,json也使它们失效。 jsonparsing器将第一个string( '{"result": ["lunch", "\"Show\""] }' )看作{"result": ["lunch", ""Show""] } ,因为\"在javascript的意思是" ,但是不会退出双引号的string。

第二个string'{"result": ["lunch", "\\\"Show\\\""] }'先取消转换为{"result": ["lunch", "\"Show\""] } (这是正确地由json转义)。

我认为, '{"result": ["lunch", "\\"Show\\""] }'应该工作。

这个问题是由双折叠string转义机制引起的:一个来自JS,一个来自JSON。

将反斜杠字符与另一个后面的字符组合在一起用于表示string中不可表示的一个字符 。 ''\''代表'\'等

这个转义机制发生在JSON.parse()工作之前。

例如,

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

从string生成器的angular度来看,它将四个反斜杠 '\'传入JavaScript解释器。

从JavaScript解释器的angular度来看,它解释了两个反斜杠(\),因为每个'\'序列将被解释为一个'\'。

从JSONparsing器的angular度来看,它接收两个反斜杠 (\\),JSONstring转义规则将parsing为一个单独的“\”,即输出结果。

解释你的第一个代码:

 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); 

我还没有尝试过。

closuresphp.ini中的 magic_quotes_gpc

PHP到JavaScript对象(PHP> = 5.3.0)

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