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!
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.
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));
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 ).
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);
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);
Essayez d’utiliser un deuxième paramètre pour la fonction json_decode:
$json = json_decode(file_get_contents($file), true);
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";
}
Lorsque vous voulez créer le format JSON, il doit être dans ce format pour pouvoir être lu:
[
{
"":"",
"":[
{
"":"",
"":""
}
]
}
]