2016-04-09 1 views
0

PHPで配列データを.jsonファイルに保存しています。 .jsonファイルは、JSによって別の場所で呼び出され、変数に入れられます。ここで ファイルにJSONを保存し、出力が存在する場合は変更する

は、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ファイルを見ることができるようにそれが実行されるようになりました2つの配列のリストを持っていますエラーになります。

代わりに、このようなファイルに保存するので: [{ ...info... }] [{ ...info... }]

私はそれがこのように保存したい: [{ ...info... },{ ...info... }]

私は必ず何らかの方法でPHPを微調整する必要がありますが、ではないでしょうね私はこれをどうやってできるのか。助言がありますか?

+1

既存のファイルにJSONを追加することはできません。ファイルの内容をロードし、変数にデコードし、新しいデータを追加し、エンコードして古いファイルを上書きして保存する必要があります。 – fusion3k

+0

申し訳ありませんJSON形式の作業には初めてですが、これを実現するための基本的な例を教えてください。注:ここでの全ては、期待通りに動作します(もちろん、JS変数とは別にファイル内の2つの配列に分割されています)。大括弧を削除し、ファイルを検出するとカンマを追加する方法があると思っていました存在するので、それはすべて1つの配列にあります –

+0

ファイルを最初に変数に読み込み、その変数の配列に新しいデータを追加してから、そのファイルをデコードして保存する必要があります(前のファイルを上書きします) –

答えて

1

あなたのメソッドでは、一意の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の2番目のパラメータを使用して、新しい追加値との一貫性のための連想配列を返しますが、あなたの場合は完全にオプションです。ファイルが存在しない場合、$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"); 
+0

これは完璧に動作します、説明にも感謝します。 –

0

あなたは、このようにあなたが持っている、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)); 
関連する問題