2

我正在编写使用数据库的 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()
  • 尝试使用各种“转义字符串”变体。

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

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

我相信大小与它有关,因为小字符串似乎工作正常。

谢谢大家 :)

4

4 回答 4

3

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

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

“超出”:{“S01E01.html”:{“2217”:1}},:{“S01E01.html”:

将该null更改为有效的属性名称,json_decode并将完成这项工作。

于 2012-08-08T20:10:14.927 回答
2

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

于 2012-08-14T16:30:29.910 回答
0

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

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

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

我建议 var_dumping 并使用 find 函数来寻找这些字符之王。

于 2012-08-08T20:15:35.940 回答
0

只是在偶然的机会.. 对于任何点击这个线程而不是 OP 问题的人来说更多......我错过了以下内容,有人在调用堆栈中的htmlentities($json)方式高于我。只要确保你没有被同样的咬伤并检查 html 源代码。

踢自己 #124

于 2013-12-09T10:10:43.593 回答