11
votes

Accéder à un nom d'objet JSON en PHP

J'ai le JSON suivant:

$jsonurl = "http://www.monopolycitystreets.com/player/stats?nickname=$username&page=1";
$json = file_get_contents($jsonurl,0,null,    $obj2 = json_decode($json);

foreach ( $obj2->streets as $street )
{   
    //Here I want to print the "-91607259\/387798111" for each street, please help
    //echo $street[0]; gives "Fatal error: Cannot use object of type stdClass as array"
    //echo $street gives "Catchable fatal error: Object of class stdClass could not be converted to string"
    echo '<th>'.$street->name.'</th><td>'."M ".number_format($street->value, 3, ',', ',').'</td>';
}


0 commentaires

4 Réponses :


0
votes

Je ne peux pas essayer maintenant, mais si vous faites un: xxx

Vous devriez pouvoir voir exactement comment accéder à vos informations.


1 commentaires

Aussi avec Firebug, vous avez un «Explorateur» JSON vraiment joli où vous pouvez voir et naviguer dans toute la structure et les données.



13
votes

Considérant cette pièce de code: xxx

vous obtiendrez: xxx

ce qui signifie que vous pouvez faire boucle dans les rues comme celle-ci. : xxx

avec ceci, pour chaque $ rue , vous obtiendrez la clé correspondante dans $ ID - et les données dans $ rue .



Ou vous pouvez y accéder directement à une manière: xxx

qui vous obtiendra: xxx


Votre $ obj2-> rue est un objet, ce qui signifie que vous ne pouvez pas utiliser l'accès Array-Syntaxe; Ceci explique l'erreur " fatale: impossible d'utiliser l'objet de type stdclass comme tableau " si vous essayez d'utiliser ceci: xxx

mais les propriétés de votre objet ont des noms assez "étranges"; Ce que signifie que vous ne pouvez pas faire cela: xxx

qui donne une erreur Erreur d'analyse: erreur de syntaxe, inattendue '-', attente t_string ou t_variable ou "{" ou "$ '

ni que: xxx

qui donne également erreur d'analyse: erreur de syntaxe, inattendue t_const_encapsed_string, attendant t_string ou t_variable ou " {'ou' $ ''

Heureusement, vous pouvez utiliser {} en sorte de "protéger" le nom de vos clés et que tout fonctionne ;-)
(je ne trouve pas la page dans le manuel qui explique cette syntaxe ni donner son nom ... Si quelqu'un sache ...)


1 commentaires

foreach ($ obj2-> rues comme $ id => $ rue) était la pièce manquante. Merci pour votre aide et votre explication!



19
votes

J'imagine que la chose la plus simple à faire est de décoder dans des tableaux associatifs au lieu d'objets STDCLASS

$obj2 = json_decode( $json, true );

foreach ( $obj2['streets'] as $coords => $street )
{   
  echo $coords;
}


2 commentaires

Utilisation de tableaux associatifs "JSON_Decode ($ JSON, vrai);" m'a donné cette erreur "AVERTISSEMENT: argument invalide fourni pour Foreach ()" mais le "foreach ($ obj2-> rues comme $ coords => $ rue)" a travaillé comme un charme! : D Merci beaucoup! Aussi grâce à Gumbo pour le code Modifier. Stackoverflow est vraiment génial!


HAHA, j'ai suggéré de passer à des tableaux associatifs, puis j'ai immédiatement oublié d'utiliser cette syntaxe dans mon extrait. Réponse mise à jour. Merci pour la prise;)



2
votes

Un moyen simple d'extraire des données de json string code> est d'utiliser jsone_decode () code> fonction. Par exemple: xxx pré>

alors vous pouvez simplement accéder aux membres de $ décoded_data ​​code> à l'aide de -> code> opérateur: p>

echo "$decoded_data->nickname \n";
echo "$decoded_data->level \n";


0 commentaires