2017-09-21 2 views
0

OK Je suis perplexe.Accès à un noeud enfant en utilisant JSON dans PHP et file_get_contents()

J'ai essayé de nombreuses approches différentes et j'ai passé la meilleure partie de quelques heures à chercher en vain ma situation exacte, ou je suis fatigué et aveugle.

Voici le JSON brut tiré d'un URI à l'aide file_get_contents():

{"id":"XXX","name":"Customer1","os":"CentOS Linux 7.3.1611 Core","cpu_type":"Intel(R) Xeon(R) CPU E3-1245 V2 @ 3.40GHz","networking_v4":[{"addr":"xxx.xxx.xxx.xxx","if":"eth0"}],"networking_v6":[{"addr":"xxxx","if":"eth0"},{"addr":"xxxx","if":"eth0"}],"agent_version":0.96,"status":"up","last_update":1505949230,"first_update":1500588943,"notifications_count":8,"ip_whois":{"ip":"xxx.xxx.xxx.xxx","hostname":"xxx","city":"Garwood","region":"New Jersey","country":"US","loc":"xxx","org":"AS20473 Choopa, LLC","postal":"xxx"},"additional_fields":[{"value":"xxx","key":"Datacenter"},{"value":"","key":""},{"value":"","key":""},{"value":"","key":""},{"value":"","key":""},{"value":"","key":""},{"value":"","key":""},{"value":"","key":""},{"value":"","key":""}]} 

Comme vous pouvez le voir sa demande assez simple et j'ai tous les bits de données, sauf celles imbriquées dans networking_v4 et networking_v6.

J'ai essayé d'accéder à ceux qui, comme si:

'ipv4' => $json->networking_v4->addr, 
'ipv4dev' => $json->networking_v4->if, 
'ipv6' => $json->networking_v6->addr, 
'ipv6dev' => $json->networking_v6->if, 

Voici l'aperçu complet du code dans son intégralité:

$content = file_get_contents($url); 
    $json = json_decode($content); 
    $server_lastupd = $json->last_update; 
    $server_firstupd = $json->first_update; 
    $server = array(
    'id' => $json->id, 
    'name' => $json->name, 
    'os' => $json->os, 
    'cputype' => $json->cpu_type, 
    'ipv4' => $json->networking_v4->addr, 
    'ipv4dev' => $json->networking_v4->if, 
    'ipv6' => $json->networking_v6->addr, 
    'ipv6dev' => $json->networking_v6->if, 
    'status' => $json->status, 
    'lastupd' => $json->$server_lastupd, 
    'firstupd' => $json->$server_firstupd, 
    'notifications' => $json->notifications_count, 
    'ip' => $json->ip_whois->ip, 
    'hostname' => $json->ip_whois->hostname, 
    'city' => $json->ip_whois->city, 
    'region' => $json->ip_whois->region, 
    'country' => $json->ip_whois->country, 
    'loc' => $json->ip_whois->loc, 
    'org' => $json->ip_whois->org, 
    'postal' => $json->ip_whois->postal, 
    'dctag' => $json->additonal_fields->dctag, 
    'source' => "XXX" 
); 
    return $server; 

Donc, ma question est que je parais être incapable d'accéder à l'enfant contenu dans networking_v4 et networking_v6.

Toute aide à ce sujet serait massivement appréciée, elle m'a bloqué pour la meilleure partie de 6 heures la nuit dernière et un peu plus aujourd'hui, alors je cède, quelqu'un s'il vous plaît montrez-moi la lumière! Un grand merci :)

+0

voir les supports dans le json? '[]'? ce sont des tableaux, pas des objets – Calimero

+0

Dans le futur, regardez 'var_dump ($ json)' ou 'print_r ($ json)' – AbraCadaver

Répondre

1

On dirait que ceux-ci sont imbriqués dans des tableaux de la [{ "clé": « valeur »}, { « clé »: « valeur »}]. Crochets Avez-vous essayé

ipv4 => $json->networking_v4[0]->addr, 
+0

Cela a fait l'affaire! Ne peut pas croire que c'était aussi simple Oui, ce sont des tableaux imbriqués ou des tableaux d'enfants pour certaines personnes, mais je n'arrivais pas à trouver comment y accéder, je l'ai essayé dans l'autre sens en oubliant cette méthode, ça fonctionne et votre réponse est très apprécié beaucoup merci :) –

+0

Aussi pas coupé ma propre faute d'orthographe plus bas! : D merci encore @reginol_Blindhop –

0

Essayez $json->networking_v4[0]->addr.

Les touches networking_v4 et networking_v6 pointent vers des tableaux, vous devez donc choisir l'index que vous souhaitez consulter. Le premier n'a qu'un seul élément, donc il est facile de choisir l'index 0, mais ce dernier a plusieurs éléments, vous devrez donc déterminer lequel vous voulez.