PHP json_解码返回空值
我正在编写使用数据库的PHP代码。为此,我使用数组作为哈希映射。 每次从数据库中添加或删除内容时,我都会将其保存到文件中 我的数据库结构迫使我使用这种方法,不能使用mysql或任何其他标准数据库(学校项目,所以结构保持原样) 我构建了两个函数: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
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!