storage.json:
{"544aee0b0a00f":{"p_name":"testname","p_about":null,"file":"images\/1.png"}}
{"548afbeb42afe":{"p_name":"testname2","p_about":null,"file":"images\/2.png"}}
{"549afc8c8890f":{"p_name":"testname3","p_about":null,"file":"images\/3.jpg"}}
现在,开头是字母的数字是在将项目写入文件时调用的uniqid()函数。
<?php
$storage_file = 'storage.json';
$storage = file_get_contents($storage_file);
$storage = json_decode($storage,true);
$storage = empty($storage) ? array() : $storage;
print_r($storage)
?>
现在我已经尝试显示json文件中的所有记录,但只有我在文件中有1条记录,如果我有1条以上,就像这里约(3条记录)而不是我得到的结果是简单文本:Array()
有人可以帮帮我吗?我有点被困在这里,不知道如何解决这个问题
答案 0 :(得分:4)
如果您尝试一次解码所有内容,它将因无效JSON
而失败,因为您需要一个数组来容纳多个对象。
相反,您需要逐个解码每一行:
<?php
$storage_file = 'storage.json';
$storage = file_get_contents($storage_file);
$lines = explode("\n", $storage);
for ($i=0;$i<count($lines);$i++)
{
$data = json_decode($lines[$i],true);
print_r($data);
}
?>
<?php
$storage_file = 'storage.json';
$storage = file_get_contents($storage_file);
$lines = explode("\n", $storage);
foreach ($lines as $line)
{
$data = json_decode($line,true);
print_r($data);
}
?>
<?php
$storage_file = 'storage.json';
$storage = file_get_contents($storage_file);
$lines = explode("\n", $storage);
foreach ($lines as $line)
{
$data = json_decode($line, true);
foreach ($data as $key => $value) {
echo "p_name = ".$data[$key]["p_name"]."\n";
}
}
?>
答案 1 :(得分:0)
正如上面提到的meda,代码完全正常,我将使用foreach
$storage_file = 'storage.json';
$storage = file_get_contents($storage_file);
$lines = explode("\n", $storage);
foreach ($lines as $str){
$data = json_decode($str,true);
print_r($data);
}
答案 2 :(得分:0)
我迟到了,但希望,这个答案对某人有用。
每个文件行都有有效的json
这是使用file()
的最佳解决方案:
$data = array_map(function($row){
return json_decode($row);
}, file('storage.json'));
print_r($data);
file
给我们一些文件行(所以,我们不需要爆炸它)array_map
将json_decode
应用于每一行仅限获取pname
:
$data = array_map(function($row){
$a = json_decode($row);
return $a[key($a)]['pname'];
}, file('storage.json'));
print_r($data);
添加强>
您将此代码用于创建文件:
$new_id = count($storage);
$uid = uniqid();
$storage[$uid] = $new_record;
file_put_contents($storage_file,json_encode($storage), FILE_APPEND);
但要好好用这个:
//get current database:
$data = json_decode(file_get_contents($filename), true);
//...
$uid = uniqid();
$data[$uid] = $new_record;
file_put_contents($filename, json_encode($storage));
所以我们总是拥有所有数据的有效json 总是可以简单地说:
//get current database:
$data = json_decode(file_get_contents($filename), true);