PHP如何回显JSON对象中的特定键?

时间:2015-02-12 20:21:46

标签: php json

我有这个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"。

1 个答案:

答案 0 :(得分:2)

您只需要深入了解JSON对象。如果你这样做:

echo $arr->droplet->networks->v4[0]->ip_address;

输出:

104.131.211.202

至于解释JSON的细分,请考虑每个“{”或“[”将更深入地引入结构,而每个“,”在当前级别上是水平的。这意味着 id networks 并行,我们想要的是 networks ,所以我们指向它。遵循 networks 中的相同模式,我们进入 v4 ,这是一个数组。数组中的位置通过包含索引的方括号引用。由于我们想要第一个位置,我们使用 [0] 。最后, ip_address 是我们当前的级别,所以我们可以在这里指出它。