.JSON文件通过PHP创建NULL值

时间:2018-10-12 04:36:54

标签: php json

因此,我试图弄清楚为什么在尝试向其写入数组后,在.json文件中得到NULL值的原因。创建新文件后,仅在“ array_push”行中发生这种情况。如果已经存在一个带有值的.json文件,则它将正确写入该文件。我唯一能猜到的是文件在创建时缺少其中的'{'和'}'。

到目前为止,我的工作量很小,但不确定这是正确的方法。有人可以告诉我这是好是坏吗?

请澄清一下,.json文档仅包含NULL保管库,文件中除了单词NULL外没有任何数组元素或其他任何内容。

//CHECK IF FILE EXISTS, ELSE CREATE IT
$log_filename = "./site_files/logs/error-404-log.json";
if(!file_exists($log_filename)) {
    touch($log_filename);
    //LINE BELOW IS MY WORK AROUND, I'M NOT SURE IF THIS IS THE RIGHT WAY
    file_put_contents($log_filename, json_encode(json_decode("{}")));
    echo "$log_filename was created. <br />";
}

$log_array = array();
$new_data =  array(
    'current_date_stamp' => $current_date_stamp,
    'current_page_trail' => $current_page_trail
);

$json_data = file_get_contents($log_filename);
if($log_array != "") { $log_array = json_decode($json_data, true); }
//WHEN CREATING A NEW FILE, ARRAY_PUSH GIVES ERROR
array_push($log_array, $new_data);
$json_data = json_encode($log_array, JSON_PRETTY_PRINT);

file_put_contents($log_filename, $json_data);

2 个答案:

答案 0 :(得分:1)

$log_filename = "error-404-log.json";                // establish the path/to/filename.json
if (file_exists($log_filename)) {                    // if path/to/filename.json exists
    $json = file_get_contents($log_filename);        // access PRETTY json string
    echo "pre-existing data: <div><pre>$json</pre></div><br>";  // display json string
    $array = json_decode($json, true);               // decode to prepare for new data
}

// data always maintains the same structure: an array of 2-element arrays
$array[] = [
    'current_date_stamp' => date('Y-m-d H:i:s'),
    'current_page_trail' => "foo"
];

// create/update the file
$new_json = json_encode($array, JSON_PRETTY_PRINT);  // re-encode updated array data
echo "new data: <div><pre>$new_json</pre></div>";    // display new json string
file_put_contents($log_filename, $new_json);         // create or overwrite file

答案 1 :(得分:0)

您的代码失败,因为您正在将$log_array与一个空字符串进行比较,该条件将始终通过,因为此数组永远不会是一个空字符串。在if语句中,您解码文件的内容,当文件中没有内容时,这将是一个空字符串,并将返回NULL,此后,您将此NULL值写入文件。如果您检查$json_data是否为空字符串,则您的代码应能正常工作,我也建议您这样做:

$log_array = array();
$new_data =  array(
 'current_date_stamp' => $current_date_stamp,
 'current_page_trail' => $current_page_trail
);

$json_data = file_get_contents($log_filename);
if($json_data != "") { 
    $log_array = json_decode($json_data, true); 
    //WHEN CREATING A NEW FILE, ARRAY_PUSH GIVES ERROR
    array_push($log_array, $new_data);
    $json_data = json_encode($log_array, JSON_PRETTY_PRINT);

    file_put_contents($log_filename, $json_data);
}

这更好,因为如果字符串为空,则其他所有操作都不相关。