web-dev-qa-db-fra.com

Ajouter des données à un fichier .JSON avec PHP

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?

11
benhowdle89
$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);
32
Tim

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);
}
20
Tom Martin

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.

14
Marc B

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);
}
4
spstanley

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);   
3
Cristiana Chavez
/*
 * @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));
}
0
Karma