PHP json_decode返回null

时间:2012-08-08 20:04:52

标签: php json

我正在编写使用数据库的PHP代码。为此,我使用数组作为哈希映射。 每次在我的数据库中添加或删除内容时,我都会将其保存到文件中。

我被我的数据库结构强制使用这个方法,不能使用mysql或任何其他标准数据库(学校项目,所以结构保持原样)。

我建立了两个功能:

function saveDB($db){
    $json_db = json_encode($db);
    file_put_contents("wordsDB.json", $json_db);
} // saveDB

function loadDB(){
    $json_db = file_get_contents("wordsDB.json");
    return json_decode($json_db, true);
} // loadDB

当回显编码后或从文件加载后得到的字符串时,我得到一个有效的json(在json查看器上测试)每当我尝试使用json_decode()解码字符串时,我得到null (用var_dump()进行测试。)

json字符串本身很长(大约200,000个字符,仅用于测试)。

我尝试了以下内容:

  • 用双引号或单引号替换单引号/双引号(没有任何反斜杠,带有一个反斜杠和三个反斜杠。我可以想到在原始和替换字符串中使用不同数量的反斜杠的任何组合),都是手动并使用str_replace()
  • 在json字符串之前和之后添加引号。
  • 更改页面的编码。
  • 解码而不保存到文件(编码后右)。
  • 检查是否有斜线和反斜杠。没有找到。
  • 尝试addslashes()
  • 尝试使用各种“Escape String”变体。

json_last_error()不起作用。我没有错误编号(获取null,而不是0)。

这不是我的服务器,所以我不确定使用什么PHP版本,我无法升级/降级/安装任何东西。

我认为尺寸与它有关,因为小字符串似乎工作得很好。

谢谢大家:)

4 个答案:

答案 0 :(得分:3)

检查您的文件是否为UTF8编码。 json_decode仅适用于UTF8编码数据。

编辑: 在我看到上传的JSON数据后,我做了一些挖掘,发现有'null'键。搜索:

“超过”:{ “S01E01.html”:{ “2217”:1}},<强>空:{ “S01E01.html”:

null 更改为有效的属性名称,json_decode将完成此任务。

答案 1 :(得分:2)

在您的JSON文件中,将null更改为“null”,它将解决问题。

答案 2 :(得分:0)

上周我遇到了类似的问题。根据jsonlint.com,我的json是有效的。

我的json字符串包含#和a&amp;这两个使json_decode失败并返回null。

通过使用var_dump(json_decode($ myvar))在失败的地方停止,我设法找出问题的来源。

我建议使用var_dumping并使用find dunction来寻找这些角色之王。

答案 3 :(得分:0)

只是关闭机会..更多的是任何人打这个线程而不是OP的问题......我错过了以下内容,有人在通话中有 htmlentities($ json)的方式堆。只是确保你没有被咬过,并检查html源代码。

踢自己#124