如何在PHP中访问更深层次的JSON对象

时间:2012-04-20 21:37:31

标签: php json

使用以下作为JSON响应的示例,我将从使用PHP

的API获得
[
   {
    "profile_background_tile": true,
    "listed_count": 82,
    "status":  {
      "created_at": "Fri Apr 20 20:06:12 +0000 2012",
      "place": null,
    },
    "default_profile": false,
    "created_at": "Tue Oct 25 00:03:17 +0000 2011"
  }
]

我会用这样的东西......

$obj = json_decode($json);

foreach($obj as $index => $user) {
    echo $user->profile_background_tile;
    echo $user->listed_count;
    echo $user->status;    
    echo $user->default_profile;
    echo $user->created_at;
}

现在我需要帮助的地方是status下的JSON响应,created_atplace

我不知道如何访问这些项目?

2 个答案:

答案 0 :(得分:1)

您使用完全相同的逻辑,但更深层次:

echo $user->status->created_at;
echo $user->status->place;

这就是为什么有效:你解码的JSON是对象数组。每个对象都有profile_background_tile之类的属性。它们还具有status属性,该属性恰好是另一个对象,具有属性created_atplace。并使用$obj->prop语法访问对象属性。

答案 1 :(得分:1)

错误

您的JSON无效......

看看

"status":  {
  "created_at": "Fri Apr 20 20:06:12 0000 2012",
  "place": null,
},

,之后"place": null不应该存在

尝试

$json = '[{"profile_background_tile": "true",
    "listed_count": 82,
    "status":  {
      "created_at": "Fri Apr 20 20:06:12 0000 2012",
      "place": null
    },
    "default_profile": false,
    "created_at": "Tue Oct 25 00:03:17 +0000 2011"
  }]';

echo "<pre>";
$obj = json_decode ( $json );
foreach ( $obj as $index => $user ) {
    echo $user->status->created_at , PHP_EOL;
    echo $user->status->place , PHP_EOL;

}

输出

 Fri Apr 20 20:06:12 0000 2012