使用对象/箭头语法使用PHP访问嵌套的JSON值

时间:2019-03-09 22:53:33

标签: php json

我已经阅读了十几个关于该主题的堆栈文章,并且给出了我解码的JSON字符串,这些文章都不起作用。这是我的JSON:

{
   "id":"cus_EfVGU7XtvtKUx2",
   "account_balance":0,
   "cards":{
      "count":1,
      "data":[
         {
            "id":"card_1ECAFn2H1YALOWTjH0zGfOS7",
            "exp_month":11,
            "exp_year":2019,
            "last4":"1111",
            "metadata":[

            ],
            "name":"ned land",
            "type":"Visa"
         }
      ]
   },
   "invoice_prefix":"5F8A134",
   "has_more":false,
   "total_count":1,
   "url":"\/v1\/customers\/cus_EfVGU7XtvtKUx2\/sources"
}

然后我将该字符串编码为一个对象:

$obj = json_decode($json, false);

通过执行以下操作,我可以轻松获取最上面的id值:

$obj->id

但是当我尝试获取exp_month值时,我返回了一个空字符串:

$expMonth = $obj->cards->data->exp_month;

然后我尝试使用数组语法:

$obj = json_decode($json, true);
$expMonth = $obj["cards"]["data"]["exp_month"];

然后$expMonth再次解析为空字符串。我在做什么错了?

2 个答案:

答案 0 :(得分:2)

使用$expMonth = $obj->cards->data[0]->exp_month;$data是一个数组。

完整示例:

$obj = json_decode('{
   "id":"cus_EfVGU7XtvtKUx2",
   "account_balance":0,
   "cards":{
      "count":1,
      "data":[
         {
            "id":"card_1ECAFn2H1YALOWTjH0zGfOS7",
            "exp_month":11,
            "exp_year":2019,
            "last4":"1111",
            "metadata":[

            ],
            "name":"ned land",
            "type":"Visa"
         }
      ]
   },
   "invoice_prefix":"5F8A134",
   "has_more":false,
   "total_count":1,
   "url":"\/v1\/customers\/cus_EfVGU7XtvtKUx2\/sources"
}');

print_r($obj->cards->data[0]->exp_month);

输出为11

答案 1 :(得分:1)

数据是对象数组。

$obj->cards->data[0]->exp_month

应该做的事