在PHP中解码JSON时出错:"意外字符"

时间:2014-03-20 14:58:41

标签: php json

我在PHP中有一个奇怪的JSON解码问题。某个JSON文件(只有这个)可靠地产生解码错误。 PHP部分没什么特别的:

$data = array();
if (is_file(DIR.'config.json')) {
    $data = json_decode(DIR.'config.json');
}

// diagnostics:
var_dump($data); // --> NULL (would be array() if decoding didn't happen)
var_dump(json_last_error()); // --> int(4) === JSON_ERROR_SYNTAX
var_dump(json_last_error_msg()); // --> string(20) "unexpected character"
echo file_get_contents(DIR.'config.json'); // --> '["a"]'

我尝试了什么:

  • 简化JSON。该文件的内容现为["a"]
  • 验证JSON,只是为了确定,在四个验证器中,包括jsonlint.com并将其粘贴到浏览器控制台中
  • 无BOM,纯ASCII文件
  • 拥有阅读权限。上面的echo工作得很好。
  • 完全独立的JSON文件内容。
  • 路径是正确的。通过上述echo声明证明。 JSON文件位于docroot中。

不幸的是,PHP的JSON lib没有更准确地说明错误,所以我不知道真正会导致错误。

有谁有想法,我该怎么办?

2 个答案:

答案 0 :(得分:3)

您不会解码文件内容,而是解码文件本身的名称,这就是您获取null的原因。你的代码应该是:

$data = array();
if (is_file(DIR.'config.json')) {
    $data = json_decode(file_get_contents(DIR.'config.json'));
}

答案 1 :(得分:2)

json_decode(DIR.'config.json');

您正在尝试解码字符串"<whatever-DIR-is>config.json"。那不是有效的JSON字符串。你可能想要:

json_decode(file_get_contents(DIR.'config.json'));

您可能还想要更多咖啡。