2016-04-09 9 views
0

Ich speichere Array-Daten in eine .json-Datei mit PHP. Die JSON-Datei wird dann an anderer Stelle von JS aufgerufen und in eine Variable geschrieben.Speichern von JSON in Datei, Ändern der Ausgabe, wenn vorhanden

Hier ist der Code für die 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"); 

Wenn dies zum ersten Mal ausgeführt wird, wird es erkennen, wenn die Datei & existiert entweder eine neue Datei mit dem vorhandenen auf dem Ergebnis je erstellen oder anfügen .

Hier ist eine Vorschau der Datei ‚.json‘ nach dem PHP-Code oben zum ersten Mal ausgeführt wird:

[{"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":""}] 

Das Problem, das ich habe ist, dass, wenn Sie den PHP-Code zum zweiten Mal ausführen, wird die .json Datei wird dann wie folgt aussehen:

[{"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":""}] 

Der Javascript lädt die ‚.json‘ Datei als Variable, wie: var contacts = //fileoutputhere, aber wie Sie die Datei .json jetzt sehen kann, hat zwei Listen Array so läuft es in einen Fehler.

Statt wie diese in die Datei zu speichern: [{ ...info... }] [{ ...info... }]

Ich möchte es so speichern: [{ ...info... },{ ...info... }]

Ich weiß, ich werde die PHP in irgendeiner Weise zwicken müssen, aber nicht sicher, wie kann ich das machen? Irgendwelche Vorschläge?

+1

Sie können Ihren JSON nicht an eine vorhandene Datei anhängen. Sie müssen den Dateiinhalt laden, in einer Variablen dekodieren, neue Daten hinzufügen, verschlüsseln und speichern und alte Dateien überschreiben. – fusion3k

+0

Entschuldigung, ich bin neu in der Arbeit mit JSON-Formaten. Könnten Sie mir ein grundlegendes Beispiel dafür geben, wie ich das erreichen könnte?Hinweis: Alles hier funktioniert perfekt wie erwartet (abgesehen von der JS-Variable natürlich, da es in zwei Arrays in der Datei aufgeteilt ist) Ich hoffte nur, es gab eine Möglichkeit, die eckigen Klammern zu entfernen und ein Komma hinzuzufügen, wenn es die Datei erkennt existiert, also ist alles in einem Array –

+0

Sie müssten die Datei zuerst in eine Variable lesen, dann die neuen Daten an das Array in dieser Variablen anhängen und dann die Datei dekodieren und speichern (die vorherige Datei überschreiben, nicht anhängen) –

Antwort

1

Mit Ihrer Methode haben Sie mehrere JSON-Zeichenfolgen in der Zieldatei anstelle eines eindeutigen JSON.

Ihren Code auf diese Weise starten:

$myFile = "userdata/". $username .".json"; 

if(file_exists($myFile)) 
{ 
    $data = file_get_contents($myFile); 
    $return_arr = json_decode($data, TRUE); 
} 
else 
{ 
    $return_arr = array(); 
} 

An diesem Punkt, wenn die Datei, haben in $return_arr existiert zuvor Werte gespeichert. Ich benutze zweiten Parameter von json_encode, um ein assoziatives Array für die Kohärenz mit neuen hinzugefügten Werten zurückzugeben, aber in Ihrem Fall ist es völlig optional. Wenn die Datei nicht existiert, ist $return_arr ein leeres Array.

Dann mit Ihrem Code vorgehen:

$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); 

und überschreiben vorhandene Datei (oder eine neue erstellen):

$fh = fopen($myFile, 'w'); 
fwrite($fh, $json_mrb."\n"); 
+0

Das funktioniert perfekt, danke auch für die Erklärung - verstehe das jetzt ein bisschen besser! –

0

Sie müssen die Daten an die json Array anzuhängen, so dass Sie um die Datei zuerst zu lesen. Hier ist ein Pseudo-Code, der Ihnen den Einstieg erleichtert:

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