php json读取文件

时间:2014-12-12 14:58:51

标签: php json

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()

有人可以帮帮我吗?我有点被困在这里,不知道如何解决这个问题

3 个答案:

答案 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_mapjson_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);