JSON_ERROR_SYNTAX 尽管在线格式化程序上的 JSON 有效
当 JSON 在外部格式化程序上显示有效时,遇到来自 json_decode() 的“语法错误”响应可能会令人费解。这是一个全面的解决方案:
隐藏字符删除:
不可见字符可能会导致语法错误。使用以下代码删除这些字符:
<code class="php">$json = file_get_contents('http://www.mywebservice'); // Remove unwanted characters for ($i = 0; $i <= 31; ++$i) { $json = str_replace(chr($i), "", $json); } $json = str_replace(chr(127), "", $json); // Handle BOM (Byte Order Mark) if (0 === strpos(bin2hex($json), 'efbbbf')) { $json = substr($json, 3); }</code>
解码清理后的 JSON:
现在隐藏的字符已被删除,解码 JSON:
<code class="php">$obj = json_decode($json);</code>
错误处理:
如果解码仍然失败,请使用 json_last_error() 检查具体错误代码:
<code class="php">switch (json_last_error()) { case JSON_ERROR_NONE: echo 'JSON_ERROR_NONE'; break; case JSON_ERROR_DEPTH: echo 'JSON_ERROR_DEPTH'; break; // ... Other error codes default: echo 'Unknown Error'; break; }</code>
按照以下步骤,您可以可以纠正 JSON 语法错误并成功解码 JSON 数据。 PHP 5.5 的 json_last_error_msg() 函数提供了额外的错误详细信息,但在解决隐藏字符和解码问题后可能不需要。
以上是如何解决 JSON_DECODE() 中的'语法错误”尽管有效的 JSON 格式?的详细内容。更多信息请关注PHP中文网其他相关文章!