Anexar dados a um arquivo .JSON com PHP

Eu tenho esse arquivo .json desejado:

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

Estou fazendo isso com este código PHP:

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

A coisa é, eu não tenho certeza exatamente com certeza de como conseguir isso. Eu vou chamar esse código acima sempre que um formulário for enviado, então eu preciso que o ID incremente e também mantenha a estrutura JSON válida com [e {, isso é possível?

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

Isso tomou o exemplo acima c e mudou-o para o php. Isto irá pular para o final do arquivo e adicionar os novos dados sem ler todo o arquivo na memory.

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

Você está arruinando seus dados do json adicionando o texto ao lado cego. JSON não é um formato que pode ser manipulado assim.

Você terá que carregar seu texto json, decodificá-lo, manipular a estrutura de dados resultante e, em seguida, recodificá-lo / salvá-lo.

  

Digamos que você tenha [1,2,3] armazenado em seu arquivo. Seu código poderia transformar isso em [1,2,3]4 , o que é sintaticamente errado.

Se você deseja adicionar outro elemento de matriz a um arquivo JSON conforme o exemplo mostrado, abra o arquivo e procure o fim. Se o arquivo já tiver dados, procure um byte para replace o “]” após a última input, depois escreva “,” mais os novos dados menos o “[” inicial dos novos dados. Caso contrário, é seu primeiro elemento de matriz, então basta escrever sua matriz normalmente.

Desculpe, eu não sei o suficiente sobre o PHP para publicar o código real, mas eu fiz isso no Obj-C e é permitido que eu evitei ler o arquivo inteiro em primeiro, apenas para adicionar ao 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 exemplo que eu costumava append matriz JSON additioonal ao arquivo 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);