Anexar datos a un archivo .JSON con PHP

Tengo este archivo .json deseado:

[ { "id": 1, "title": "Ben\\'s First Blog Post", "content": "This is the content" }, { "id": 2, "title": "Ben\\'s Second Blog Post", "content": "This is the content" } ] 

Estoy haciendo esto con este código PHP:

 <?php $data[] = $_POST['data']; $fp = fopen('results.json', 'a'); fwrite($fp, json_encode($data)); fclose($fp); 

La cuestión es que no estoy seguro de cómo lograrlo. Voy a llamar este código arriba cada vez que se envía un formulario, por lo que necesito que el ID se incremente y también mantener la estructura JSON válida con [y {, ¿es esto posible?

 $data[] = $_POST['data']; $inp = file_get_contents('results.json'); $tempArray = json_decode($inp); array_push($tempArray, $data); $jsonData = json_encode($tempArray); file_put_contents('results.json', $jsonData); 

Esto tomó el ejemplo c anterior y lo movió a php. Esto saltará al final del archivo y agregará los nuevos datos sin leer todo el archivo en la memoria.

 // read the file if present $handle = @fopen($filename, 'r+'); // create the file if needed if ($handle === null) { $handle = fopen($filename, 'w+'); } if ($handle) { // seek to the end fseek($handle, 0, SEEK_END); // are we at the end of is the file empty if (ftell($handle) > 0) { // move back a byte fseek($handle, -1, SEEK_END); // add the trailing comma fwrite($handle, ',', 1); // add the new json string fwrite($handle, json_encode($event) . ']'); } else { // write the first event inside an array fwrite($handle, json_encode(array($event))); } // close the handle on the file fclose($handle); } 

Estás arruinando tus datos json añadiéndole texto ciegamente. JSON no es un formato que pueda manipularse de esta manera.

Tendrás que cargar tu texto JSON, decodificarlo, manipular la estructura de datos resultante, luego recodificarlo / guardarlo.

  

Digamos que tienes [1,2,3] almacenado en tu archivo. Su código podría convertir eso en [1,2,3]4 , lo cual es sintácticamente incorrecto.

Si desea agregar otro elemento de matriz a un archivo JSON como muestra su ejemplo, abra el archivo y busque hasta el final. Si el archivo ya tiene datos, busque hacia atrás un byte para sobrescribir el “]” después de la última entrada, luego escriba “,” más los datos nuevos menos el “[” inicial de los datos nuevos. De lo contrario, es su primer elemento de matriz, así que simplemente escriba su matriz normalmente.

Lo siento, no sé lo suficiente sobre PHP para publicar el código real, pero lo he hecho en Obj-C y me ha permitido evitar leer todo el archivo primero para agregarlo al final:

 NSArray *array = @[myDictionary]; NSData *data = [NSJSONSerialization dataWithJSONObject:array options:0 error:nil]; FILE *fp = fopen(fname, "r+"); if (NULL == fp) fp = fopen(fname, "w+"); if (fp) { fseek(fp, 0L, SEEK_END); if (ftell(fp) > 0) { fseek(fp, -1L, SEEK_END); fwrite(",", 1, 1, fp); fwrite([data bytes] + 1, [data length] - 1, 1, fp); } else fwrite([data bytes], [data length], 1, fp); fclose(fp); } 

Código de muestra que utilicé para agregar una matriz JSON adicional al archivo json.

  $AdditionalArray = array( 'id' => $id, 'title' => $title, 'content' => $content ); //open or read json data $data_results = file_get_contents('results.json'); $tempArray = json_decode($data_results); //append additional json to json file $tempArray[]=$AdditionalArray; $jsonData = json_encode($tempArray); file_put_contents('results.json', $jsonData);