我正在编写使用数据库的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()
。addslashes()
。 json_last_error()
不起作用。我没有错误编号(获取null,而不是0)。
这不是我的服务器,所以我不确定使用什么PHP版本,我无法升级/降级/安装任何东西。
我认为尺寸与它有关,因为小字符串似乎工作得很好。
谢谢大家:)
答案 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