2017-08-30 1 views
0

Wenn ein neuer Benutzer erstellt wird, speichere ich den Benutzernamen und das Passwort (nicht Hash) in einer JSON-Datei sowie in der Datenbank, also jedes Mal, wenn ich neue Benutzer an die JSON-Datei anhänge :Erstellen von gültigen JSON-Daten in Laravel

{ 
    "user3": "demo" 
} { 
    "user4": "demo" 
} { 
    "user4": "demo" 
} { 
    "user5": "demo" 
} 

der Code:

$data = array($request->input('username') => $request->input('password')); 
      $datos = json_encode($data); 
      File::append(storage_path('archivos/datos.json'), $data); 

natürlich über das Format nicht gültig json ist, wie ich dieses

[{ 
"user3": "demo" 
}, { 
"user4": "demo" 
}, { 
"user4": "demo" 
}, { 
"user5": "demo" 
}, { 
"user5": "demo" 
}, { 
"user5": "demo" 
}, { 
"user7": "demo" 
}, { 
"user8": "demo" 
}] 

und wieder bekommen könnte ad es mit foreach wie folgt aus:

$result = File::get(storage_path('archivos/datos.json')); 
$result = json_decode($result); 
foreach($result as $key=>$item){ 
    echo $key .''. $item; 
} 
+1

Wenn Sie in einer Datei in ein JSON-Array angehängt werden soll, werden Sie entschlüsseln müssen und re- kodiere es jedes Mal. – iainn

+0

sollte ich array_push dann verwenden? –

+1

Kann ich auch SCHLIESSEN, keine Klartextpasswörter zu speichern? – mopo922

Antwort

1

zuerst die Zeichenfolge aus der Datei erhalten, dann können Sie ein str_replace tun alle "} {" mit "} , {" ein json auch [ am Anfang und ] am Ende haben, so fügen wir sie auch:

$json = "[".str_replace('} {', '},{', $fileContent)."]"; 

Hier haben wir einen jSON-String in Variable $ json, so dass wir es zu Array durch diese umwandeln kann:

$users = json_decode($json); 
+0

Ich glaube nicht, dass dies das Problem ist, das er lösen muss. Das erste Code-Snippet des OP, das Sie hier ansprechen, war nur ein Beispiel für die Ergebnisse seines aktuellen Versuchs. – mopo922

+0

Was ich denke, er will keine json string aus einer Datei als json es ist nicht möglich, auch jedes Mal lesen die Datei-Decodierung und Hinzufügen neuer Benutzer zum Array, dann das Schreiben in Datei es ist keine gute Idee, weil für jeden Benutzer haben wir dazu ist es nicht gut für die Leistung –

0

der schnellste Weg wäre, eine Daten anhängen:

fopen('myfile.json', 'a'); 

aber Sie wollen ein Array speichern, so dass Sie den Inhalt der Datei zu lesen, aktualisieren und speichern.

$users = json_decode(file_get_content(storage_path('archivos/datos.json'))); 

$users[] = $newUser; 

file_put_contents(storage_path('archivos/datos.json'), json_encode($users, JSON_PRETTY_PRINT); 

Sie können auch einen Einzeiler machen (hässlich, aber funktioniert):

file_put_contents(storage_path('archivos/datos.json'), json_encode(json_decode(file_get_content(storage_path('archivos/datos.json')))[] = $newUser, JSON_PRETTY_PRINT); 
Verwandte Themen