我有这个JSON对象:
$json = '{
"droplet":{
"id":3286068,
"name":"some.domain.com",
"memory":512,
"vcpus":1,
"disk":20,
"locked":false,
"status":"active",
"kernel":{
"id":377,
"name":"CentOS 6.5 x64 vmlinuz-2.6.32-431.1.2.0.1.el6.x86_64",
"version":"2.6.32-431.1.2.0.1.el6.x86_64"
},
"created_at":"2014-11-25T19:54:41Z",
"features":[
"virtio"
],
"backup_ids":[
],
"next_backup_window":null,
"snapshot_ids":[
8724513
],
"image":{
"id":8385856,
"name":"rr1.2",
"distribution":"CentOS",
"slug":null,
"public":false,
"regions":[
"nyc2",
"nyc2"
],
"created_at":"2014-12-25T19:09:02Z",
"min_disk_size":20
},
"size_slug":"512mb",
"networks":{
"v4":[
{
"ip_address":"104.131.211.202",
"netmask":"255.255.224.0",
"gateway":"104.131.192.1",
"type":"public"
}
],
"v6":[
]
},
"region":{
"name":"New York 2",
"slug":"nyc2",
"sizes":[
],
"features":[
"virtio",
"private_networking",
"backups"
],
"available":null
}
}
}';
我可以运行:
$arr = json_decode($json);
echo "{$arr->droplet->id}";
然后回复id就好了。但我一直在尝试2小时来回应JSON对象中更深层次的ip_address ......
如何回显ip_address而只回显ip_address?
P.S。请不要告诉我如何使用正则表达式执行此操作。我可以这样做。我想学习如何回应" ip_address"我以同样的方式回应" id"。
答案 0 :(得分:2)
您只需要深入了解JSON对象。如果你这样做:
echo $arr->droplet->networks->v4[0]->ip_address;
输出:
104.131.211.202
至于解释JSON的细分,请考虑每个“{”或“[”将更深入地引入结构,而每个“,”在当前级别上是水平的。这意味着 id 与 networks 并行,我们想要的是 networks ,所以我们指向它。遵循 networks 中的相同模式,我们进入 v4 ,这是一个数组。数组中的位置通过包含索引的方括号引用。由于我们想要第一个位置,我们使用 [0] 。最后, ip_address 是我们当前的级别,所以我们可以在这里指出它。