值为\x26的JSON会中断PHPs JSON_解码
JSON结果是破坏PHPs JSON_解码。确切地说,以下字符串正在中断解码:“Sticky\x26amp;Sweet Tour” 然而,浏览器似乎能够理解它:& 声称它是无效的JSON 在PHP方面,我已经尝试过:而且值为\x26的JSON会中断PHPs JSON_解码,php,javascript,json,browser,google-api,Php,Javascript,Json,Browser,Google Api,JSON结果是破坏PHPs JSON_解码。确切地说,以下字符串正在中断解码:“Sticky\x26amp;Sweet Tour” 然而,浏览器似乎能够理解它:& 声称它是无效的JSON 在PHP方面,我已经尝试过:而且 有什么想法吗 发生的事情是,这是无效的JSON。来自该url的响应不正确--JSON不允许两位十六进制二进制转义序列,只允许unicode码点转义序列。这里应该是&,不过——不需要转义序列 不知道google/freebase为什么输出无效的JSON。您的JSON应该如下所示:
有什么想法吗 发生的事情是,这是无效的JSON。来自该url的响应不正确--JSON不允许两位十六进制二进制转义序列,只允许unicode码点转义序列。这里应该是
&
,不过——不需要转义序列
不知道google/freebase为什么输出无效的JSON。您的JSON应该如下所示:
"Sticky \\x26amp; SweetTour"
斜杠需要转义,因为它是转义字符。为什么要尝试解码一个不是JSON格式的字符串?为什么说它不是JSON格式?jsonlint.com对我来说无效。我认为JSON中不允许使用
\x
符号。它不应该是\u0026
?它只是一个字符串,可以包含您希望它包含的任何字符。问题是JSON解析器正在崩溃。这个字符串似乎来自/到xml,但这不是问题所在。数据库中该值的实际值是多少?它是“Sticky\x26amp;Sweet Tour”、“Sticky&Sweet Tour”还是“Sticky&Sweet Tour”?为什么浏览器会理解它?它是一个有效的javascript构造,因此浏览器在接受的JSON(JSON.parse
示例)中是允许的,或者使用某种eval()
机制来评估JSON($.getJSON()
,使用JSONP示例)。您不应该依赖于此行为。不知道google/freebase为什么输出无效的JSON。
-事实上,这似乎是一个需要报告的错误-或者如果是设计的,请解释。和+1。@Peeter因为示例使用的是JSONP(技术上与JSON无关).JSONP被评估为javascript,这是一种不同的语言。有效的JSON不一定是有效的javascript,反之亦然。哦,没有看其他测试,它是无效的。它应该是(正确地报告为无效的JSON).2级解释中的常见错误。JSON解析器在javascript解析器之后看到了&;
。因此需要有“\\x26”
才能将\x26
传递给JSON解析器。@Peeter因为您只转义字符串一次,所以双斜杠会被单引号吃掉。请尝试以下操作: