Ajouter les données à A. Fichier JSON avec PHP

j'ai ce désir.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"
    }
]

je fais ça avec ce code PHP:

<?php
$data[] = $_POST['data'];

$fp = fopen('results.json', 'a');
fwrite($fp, json_encode($data));
fclose($fp);

le truc c'est que, je ne suis pas sûr exactement comment y arriver. Je vais appeler ce code au-dessus de chaque fois qu'un formulaire est soumis, donc j'ai besoin de L'ID pour incrémenter et aussi de garder la structure JSON valide avec [ et {, est-ce possible?

10
demandé sur benhowdle89 2011-10-26 00:18:25

6 réponses

$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
répondu Tim 2015-02-07 03:01:15

ceci a pris l'exemple C ci-dessus et l'a déplacé vers php. Cela sautera à la fin du fichier et ajouter les nouvelles données dans sans lire tout le fichier dans la 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
répondu Tom Martin 2014-02-12 10:55:31

vous ruinez vos données json en y ajoutant aveuglément du texte. JSON n'est pas un format qui peut être manipulé comme ça.

vous devrez charger votre texte json, le décoder, manipuler la structure de données résultante, puis le ré-encoder/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 le transformer en