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