Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP json_解码返回空值_Php_Json - Fatal编程技术网

PHP json_解码返回空值

PHP json_解码返回空值,php,json,Php,Json,我正在编写使用数据库的PHP代码。为此,我使用数组作为哈希映射。 每次从数据库中添加或删除内容时,我都会将其保存到文件中 我的数据库结构迫使我使用这种方法,不能使用mysql或任何其他标准数据库(学校项目,所以结构保持原样) 我构建了两个函数: function saveDB($db){ $json_db = json_encode($db); file_put_contents("wordsDB.json", $json_db); } // saveDB function l

我正在编写使用数据库的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\u decode()
解码字符串时,我会得到null(使用
var\u dump()
测试它)

json字符串本身非常长(大约200000个字符,这只是为了测试)

我尝试了以下方法:

  • 手动或使用
    str\u replace()
    将单引号/双引号替换为双引号/单引号(没有任何反斜杠,有一个反斜杠和三个反斜杠。我能想到的任何组合,在原始字符串和替换的字符串中有不同数量的反斜杠)
  • 在json字符串前后添加引号
  • 更改页面的编码
  • 解码而不保存到文件(在编码之后)
  • 检查斜线和反斜线。没有找到
  • 已尝试添加斜杠()
  • 尝试使用各种“转义字符串”变体
json\u last\u error()
不起作用。我没有得到错误号(得到null,不是0)

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

我相信大小与此有关,因为小弦似乎很好用


谢谢大家:)

检查您的文件是否为UTF8编码<代码>json_解码仅适用于UTF8编码数据

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

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


null更改为有效的属性名,然后
json\u decode
将完成此工作。

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

我的json字符串包含一个#和一个&这两个字符串使json#U解码失败并返回null

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


我建议使用var_转储并使用find dunction查找这些字符之王。

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

只是偶然的机会……对于任何点击此线程而不是OP的问题的人来说……我错过了以下内容,有人具有htmlentities($JSON)在调用堆栈中远远超过我。只需确保您没有被相同的代码咬过,并检查html源代码即可


Kickself#124

将您的实际文件压缩到某个地方,供其他人测试。否则这可能会成为一个猜测游戏。|各种失败原因包括UTF-8 BOM前缀、字符串中的组合无效字符集,或者仅仅是内存不足错误-深度嵌套的PHP数组非常昂贵,
json_decode
本身具有一些属性处理过程中删除数据。| |否则请尝试另一个JSON库;PEARs Services_JSON,或upgradephp的up_JSON_decode。能否显示
JSON
的输出(可能在pastebin.com上)在测试中,哪个不使用
json_decode
?我不确定是否可以使用其他json库,因为我无法控制服务器,也不知道那里安装了什么。json可以在这里找到:有相同的问题,结果也是编码问题。即使我不检查文件,我也会得到null(立即进行编码和解码),解码与小JSON一起工作,因此我相信文件不是问题。无论如何,谢谢。有没有办法检查递归限制是什么?对不起,复制/粘贴错误。应该是嵌套限制,即20(PHP5.2.2)和128(PHP5.2.3+)我花了三个小时寻找这个答案……非常感谢你,Boris!