将 JSON 保存到文件,如果存在则更改输出
Saving JSON to file, changing output if exists
我正在使用 PHP 将数组数据保存到 .json 文件中。 .json 文件然后被一些 JS 在别处调用并放入变量中。
这是 PHP 的代码:
$fetch = mysqli_query($connection, "SELECT * FROM mrb_prprty WHERE `nationalid` = '". $nationalid ."' AND `author` = '" .$username. "'");
$return_arr = array();
while ($row = mysqli_fetch_array($fetch)) {
$row_array['firstName'] = $row['fname'];
$row_array['lastName'] = $row['lname'];
$row_array['nationality'] = $row['nationality'];
$row_array['phone'] = $row['mobile'];
$row_array['email'] = $row['email'];
$row_array['street'] = $row['street'];
$row_array['towncity'] = $row['towncity'];
$row_array['postcode']= $row['postcode'];
$row_array['county'] = $row['county'];
$row_array['country'] = $row['country'];
$row_array['rentpw'] = $row['rentpw'];
$row_array['nationalid'] = $row['nationalid'];
$row_array['passport'] = $row['passport'];
$row_array['isFavorite'] = $row['favourite'];
array_push($return_arr,$row_array);
}
$json_mrb = json_encode($return_arr);
$myFile = "userdata/". $username .".json";
$method = (file_exists($myFile)) ? 'a' : 'w';
$fh = fopen($myFile,$method);
fwrite($fh, $json_mrb."\n");
第一次执行时,它将检测文件是否存在并根据结果创建一个新文件或附加到现有文件。
这是第一次 运行 上面的 PHP 代码后“.json”文件的预览:
[{"firstName":"Ryan","lastName":"Butterworth","nationality":"rKqF01JNdAB1\/EjPW1sulcHzA+Lqp3y\/aaNtpixFphA=","phone":"6jAbOoIal2Eh73neklZgXcA2jJ3831uRiJWE74fADD8=","email":"gpLkiFg4ju4jv4QK6nftnPCqmzdENbsDt4ayI4L1rrkXvg0VJkxmP9Ac57fs4Ar\/","street":"22 Newton Drive","towncity":"Blackpool","postcode":"FY38BS","county":"England","country":"England","rentpw":"VCXaMj\/V6YNExbREuI08eOuINutZRxcx4vv5s2C2FR4=","nationalid":"dNDgHnJJg4rFgbb6qOEC\/dVlnJUNWLCZASo9X8GP5EE=","passport":"123456","isFavorite":""}]
我遇到的问题是,当您第二次 运行 PHP 代码时,.json 文件将如下所示:
[{"firstName":"Ryan","lastName":"Butterworth","nationality":"rKqF01JNdAB1\/EjPW1sulcHzA+Lqp3y\/aaNtpixFphA=","phone":"6jAbOoIal2Eh73neklZgXcA2jJ3831uRiJWE74fADD8=","email":"gpLkiFg4ju4jv4QK6nftnPCqmzdENbsDt4ayI4L1rrkXvg0VJkxmP9Ac57fs4Ar\/","street":"22 Newton Drive","towncity":"Blackpool","postcode":"FY38BS","county":"England","country":"England","rentpw":"VCXaMj\/V6YNExbREuI08eOuINutZRxcx4vv5s2C2FR4=","nationalid":"dNDgHnJJg4rFgbb6qOEC\/dVlnJUNWLCZASo9X8GP5EE=","passport":"123456","isFavorite":""}]
[{"firstName":"Ryan","lastName":"Butterworth","nationality":"rKqF01JNdAB1\/EjPW1sulcHzA+Lqp3y\/aaNtpixFphA=","phone":"6jAbOoIal2Eh73neklZgXcA2jJ3831uRiJWE74fADD8=","email":"gpLkiFg4ju4jv4QK6nftnPCqmzdENbsDt4ayI4L1rrkXvg0VJkxmP9Ac57fs4Ar\/","street":"22 Newton Drive","towncity":"Blackpool","postcode":"FY38BS","county":"England","country":"England","rentpw":"VCXaMj\/V6YNExbREuI08eOuINutZRxcx4vv5s2C2FR4=","nationalid":"dNDgHnJJg4rFgbb6qOEC\/dVlnJUNWLCZASo9X8GP5EE=","passport":"123456","isFavorite":""}]
Javascript 将“.json”文件加载为变量,如:var contacts = //fileoutputhere
,但如您所见,.json 文件现在有两个数组列表,因此 运行 出错。
而不是像这样保存到文件:
[{ ...info... }] [{ ...info... }]
我希望它像这样保存:
[{ ...info... },{ ...info... }]
我知道我必须以某种方式调整 PHP,但不确定我该怎么做。有什么建议吗?
使用您的方法,目标文件中有多个 JSON 字符串,而不是唯一的 JSON。
以这种方式开始你的代码:
$myFile = "userdata/". $username .".json";
if( file_exists( $myFile ) )
{
$data = file_get_contents( $myFile );
$return_arr = json_decode( $data, TRUE );
}
else
{
$return_arr = array();
}
此时,如果文件存在,则在 $return_arr
中您已经保存了之前的值。我使用 json_encode
的第二个参数到 return 一个关联数组来与新添加的值保持一致,但在你的情况下它是完全可选的。如果文件不存在,$return_arr
是一个空数组。
然后继续你的代码:
$fetch = mysqli_query($connection, "SELECT * FROM mrb_prprty WHERE `nationalid` = '". $nationalid ."' AND `author` = '" .$username. "'");
while ($row = mysqli_fetch_array($fetch)) {
(...)
}
$json_mrb = json_encode($return_arr);
并覆盖现有文件(或创建一个新文件):
$fh = fopen( $myFile, 'w' );
fwrite( $fh, $json_mrb."\n" );
您需要将数据附加到json数组,因此您必须先读取文件。这里有一些伪代码可以帮助您入门:
var myFile = "some-file.json";
var return_arr = array();
if(fileExists($myFile)){
//maybe add some error handling, in case the file contents are not json?
$return_arr = json_decode(get_file_contents($myFile));
}
while($row = getRows()){
$row_array[x] = ...
array_push($return_arr, $row_array);
}
$fh = $fopen($myFile, 'wa+');
fwrite(json_encode($return_arr));
我正在使用 PHP 将数组数据保存到 .json 文件中。 .json 文件然后被一些 JS 在别处调用并放入变量中。
这是 PHP 的代码:
$fetch = mysqli_query($connection, "SELECT * FROM mrb_prprty WHERE `nationalid` = '". $nationalid ."' AND `author` = '" .$username. "'");
$return_arr = array();
while ($row = mysqli_fetch_array($fetch)) {
$row_array['firstName'] = $row['fname'];
$row_array['lastName'] = $row['lname'];
$row_array['nationality'] = $row['nationality'];
$row_array['phone'] = $row['mobile'];
$row_array['email'] = $row['email'];
$row_array['street'] = $row['street'];
$row_array['towncity'] = $row['towncity'];
$row_array['postcode']= $row['postcode'];
$row_array['county'] = $row['county'];
$row_array['country'] = $row['country'];
$row_array['rentpw'] = $row['rentpw'];
$row_array['nationalid'] = $row['nationalid'];
$row_array['passport'] = $row['passport'];
$row_array['isFavorite'] = $row['favourite'];
array_push($return_arr,$row_array);
}
$json_mrb = json_encode($return_arr);
$myFile = "userdata/". $username .".json";
$method = (file_exists($myFile)) ? 'a' : 'w';
$fh = fopen($myFile,$method);
fwrite($fh, $json_mrb."\n");
第一次执行时,它将检测文件是否存在并根据结果创建一个新文件或附加到现有文件。
这是第一次 运行 上面的 PHP 代码后“.json”文件的预览:
[{"firstName":"Ryan","lastName":"Butterworth","nationality":"rKqF01JNdAB1\/EjPW1sulcHzA+Lqp3y\/aaNtpixFphA=","phone":"6jAbOoIal2Eh73neklZgXcA2jJ3831uRiJWE74fADD8=","email":"gpLkiFg4ju4jv4QK6nftnPCqmzdENbsDt4ayI4L1rrkXvg0VJkxmP9Ac57fs4Ar\/","street":"22 Newton Drive","towncity":"Blackpool","postcode":"FY38BS","county":"England","country":"England","rentpw":"VCXaMj\/V6YNExbREuI08eOuINutZRxcx4vv5s2C2FR4=","nationalid":"dNDgHnJJg4rFgbb6qOEC\/dVlnJUNWLCZASo9X8GP5EE=","passport":"123456","isFavorite":""}]
我遇到的问题是,当您第二次 运行 PHP 代码时,.json 文件将如下所示:
[{"firstName":"Ryan","lastName":"Butterworth","nationality":"rKqF01JNdAB1\/EjPW1sulcHzA+Lqp3y\/aaNtpixFphA=","phone":"6jAbOoIal2Eh73neklZgXcA2jJ3831uRiJWE74fADD8=","email":"gpLkiFg4ju4jv4QK6nftnPCqmzdENbsDt4ayI4L1rrkXvg0VJkxmP9Ac57fs4Ar\/","street":"22 Newton Drive","towncity":"Blackpool","postcode":"FY38BS","county":"England","country":"England","rentpw":"VCXaMj\/V6YNExbREuI08eOuINutZRxcx4vv5s2C2FR4=","nationalid":"dNDgHnJJg4rFgbb6qOEC\/dVlnJUNWLCZASo9X8GP5EE=","passport":"123456","isFavorite":""}]
[{"firstName":"Ryan","lastName":"Butterworth","nationality":"rKqF01JNdAB1\/EjPW1sulcHzA+Lqp3y\/aaNtpixFphA=","phone":"6jAbOoIal2Eh73neklZgXcA2jJ3831uRiJWE74fADD8=","email":"gpLkiFg4ju4jv4QK6nftnPCqmzdENbsDt4ayI4L1rrkXvg0VJkxmP9Ac57fs4Ar\/","street":"22 Newton Drive","towncity":"Blackpool","postcode":"FY38BS","county":"England","country":"England","rentpw":"VCXaMj\/V6YNExbREuI08eOuINutZRxcx4vv5s2C2FR4=","nationalid":"dNDgHnJJg4rFgbb6qOEC\/dVlnJUNWLCZASo9X8GP5EE=","passport":"123456","isFavorite":""}]
Javascript 将“.json”文件加载为变量,如:var contacts = //fileoutputhere
,但如您所见,.json 文件现在有两个数组列表,因此 运行 出错。
而不是像这样保存到文件:
[{ ...info... }] [{ ...info... }]
我希望它像这样保存:
[{ ...info... },{ ...info... }]
我知道我必须以某种方式调整 PHP,但不确定我该怎么做。有什么建议吗?
使用您的方法,目标文件中有多个 JSON 字符串,而不是唯一的 JSON。
以这种方式开始你的代码:
$myFile = "userdata/". $username .".json";
if( file_exists( $myFile ) )
{
$data = file_get_contents( $myFile );
$return_arr = json_decode( $data, TRUE );
}
else
{
$return_arr = array();
}
此时,如果文件存在,则在 $return_arr
中您已经保存了之前的值。我使用 json_encode
的第二个参数到 return 一个关联数组来与新添加的值保持一致,但在你的情况下它是完全可选的。如果文件不存在,$return_arr
是一个空数组。
然后继续你的代码:
$fetch = mysqli_query($connection, "SELECT * FROM mrb_prprty WHERE `nationalid` = '". $nationalid ."' AND `author` = '" .$username. "'");
while ($row = mysqli_fetch_array($fetch)) {
(...)
}
$json_mrb = json_encode($return_arr);
并覆盖现有文件(或创建一个新文件):
$fh = fopen( $myFile, 'w' );
fwrite( $fh, $json_mrb."\n" );
您需要将数据附加到json数组,因此您必须先读取文件。这里有一些伪代码可以帮助您入门:
var myFile = "some-file.json";
var return_arr = array();
if(fileExists($myFile)){
//maybe add some error handling, in case the file contents are not json?
$return_arr = json_decode(get_file_contents($myFile));
}
while($row = getRows()){
$row_array[x] = ...
array_push($return_arr, $row_array);
}
$fh = $fopen($myFile, 'wa+');
fwrite(json_encode($return_arr));