J'ai ce fichier .json:
[
{
"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"
}
]
Voici mon code PHP:
<?php
$data[] = $_POST['data'];
$fp = fopen('results.json', 'a');
fwrite($fp, json_encode($data));
fclose($fp);
Le fait est que je ne sais pas exactement comment y parvenir. Je vais appeler ce code ci-dessus chaque fois qu'un formulaire est soumis. J'ai donc besoin de l'ID pour incrémenter et conserver également la structure JSON valide avec [
et {
, est-ce possible?
$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);
Cela a pris l'exemple ci-dessus c et l'a déplacé vers php. Cela vous mènera à la fin du fichier et ajoutera les nouvelles données sans lire tout le fichier en mémoire.
// 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);
}
Vous détruisez vos données json en y ajoutant aveuglément du texte. JSON n'est pas un format qui peut être manipulé comme ceci.
Vous devrez charger votre texte Json, le décoder, manipuler la structure de données résultante, puis le recoder/le sauvegarder.
<?php
$json = file_get_contents('results.json');
$data = json_decode($json);
$data[] = $_POST['data'];
file_put_contents('results.json', json_encode($data));
Disons que vous avez [1,2,3]
stocké dans votre fichier. Votre code pourrait transformer cela en [1,2,3]4
, ce qui est syntaxiquement incorrect.
Si vous souhaitez ajouter un autre élément de tableau à un fichier JSON comme le montre votre exemple, ouvrez le fichier et cherchez-le à la fin. Si le fichier contient déjà des données, recherchez un octet en arrière pour écraser le ]
suivant la dernière entrée, puis écrivez ,
plus les nouvelles données moins le [
initial des nouvelles données. Sinon, c'est votre premier élément de tableau, écrivez donc votre tableau normalement.
Désolé, je n'en sais pas assez sur PHP pour publier le code réel, mais je l'ai déjà fait dans Obj-C et cela m'a permis d'éviter de lire le fichier entier en premier pour ajouter à la fin:
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);
}
Exemple de code utilisé pour ajouter un tableau JSON supplémentaire au fichier 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);
/*
* @var temp
* Stores the value of info.json file
*/
$temp=file_get_contents('info.json');
/*
* @var temp
* Stores the decodeed value of json as an array
*/
$temp= json_decode($temp,TRUE);
//Push the information in temp array
$temp[]=$information;
// Show what new data going to be written
echo '<pre>';
print_r($temp);
//Write the content in info.json file
file_put_contents('info.json', json_encode($temp));
}