web-dev-qa-db-fra.com

PHP lire et écrire du JSON à partir d'un fichier

J'ai le JSON suivant dans un fichier list.txt:

{
"bgates":{"first":"Bill","last":"Gates"},
"sjobs":{"first":"Steve","last":"Jobs"}
}

Comment puis-je ajouter "bross":{"first":"Bob","last":"Ross"} dans mon fichier avec PHP?

Voici ce que j'ai jusqu'à présent:

<?php

$user = "bross";
$first = "Bob";
$last = "Ross";

$file = "list.txt";

$json = json_decode(file_get_contents($file));

$json[$user] = array("first" => $first, "last" => $last);

file_put_contents($file, json_encode($json));

?>

Ce qui me donne une erreur fatale: impossible d'utiliser un objet de type stdClass comme tableau sur cette ligne:

$json[$user] = array("first" => $first, "last" => $last);

J'utilise PHP 5.2. Des pensées? Merci!

44
Josiah

L'indice est dans le message d'erreur - si vous regardez la documentation de json_decode Notez que cela peut prendre un deuxième paramètre, qui contrôle si elle retourne un tableau ou un objet - la valeur par défaut est object.

Alors changez votre appel en

$json = json_decode(file_get_contents($file), true);

Et cela retournera un tableau associatif et votre code devrait fonctionner correctement.

81
John Carter

L'exemple pour lire et écrire JSON en PHP:

$json = json_decode(file_get_contents($file),TRUE);

$json[$user] = array("first" => $first, "last" => $last);

file_put_contents($file, json_encode($json));
22
4EACH

Ou utilisez simplement $ json comme objet:

$json->$user = array("first" => $first, "last" => $last);

Voici comment il est renvoyé sans le deuxième paramètre (en tant qu'instance de stdClass ).

8
Liam Bailey

Vous devez faire en sorte que la fonction de décodage retourne un tableau en transmettant le paramètre true.

json_decode(file_get_contents($file),true);

7
Aknosis

Cela devrait vous permettre d’obtenir le contenu de list.txt fichier

$headers = array('http'=>array('method'=>'GET','header'=>'Content: type=application/json \r\n'.'$agent \r\n'.'$hash'));

$context=stream_context_create($headers);

$str = file_get_contents("list.txt",FILE_USE_INCLUDE_PATH,$context);

$str=utf8_encode($str);

$str=json_decode($str,true);

print_r($str);
3
Ur Friend

Essayez d’utiliser un deuxième paramètre pour la fonction json_decode:

$json = json_decode(file_get_contents($file), true);
3
Lubor Bílek

Si vous souhaitez afficher les données JSON dans un format bien défini, vous pouvez modifier le code comme suit:

file_put_contents($file, json_encode($json,TRUE));


$headers = array('http'=>array('method'=>'GET','header'=>'Content: type=application/json \r\n'.'$agent \r\n'.'$hash'));

$context=stream_context_create($headers);

$str = file_get_contents("list.txt",FILE_USE_INCLUDE_PATH,$context);

$str1=utf8_encode($str);

$str1=json_decode($str1,true);



foreach($str1 as $key=>$value)
{

    echo "key is: $key.\n";

    echo "values are: \t";
        foreach ($value as $k) {

        echo " $k. \t";
        # code...
    }
        echo "<br></br>";
        echo "\n";

}
2
user3762267

Lorsque vous voulez créer le format JSON, il doit être dans ce format pour pouvoir être lu:

[ 
  {
    "":"",
    "":[
     {
       "":"",
       "":""
     }
    ]
  }
]
1
markllibre