PHPでJSONのObject(stdClass)を扱う

詰まったのでメモ。

例えばこんな感じのJSONをPHPでデコードしたいとする。

object(stdClass)#1 (2) {
  ["check"]=>
  int(1)
  ["code"]=>
  object(stdClass)#2 (3) {
    ["title"]=>
    string(3) "ABC"
    ["description"]=>
    string(8) "testtest"
    ["items"]=>
    array(1) {
      [0]=>
      object(stdClass)#3 (2) {
        ["url"]=>
        string(31) "http://www.proto-star.com/"
        ["title"]=>
        string(0) ""
      }
    }
  }
}

この時、[“title”]の値を取り出したければ、

$obj = json_decode($json);
echo $obj->code->title;

という感じに書けばよいが、 [“items”] の [“url”] を取り出そうとするとつまづく。

しばらく考えたり試したりしたが上手く行かなかったため、検索してみると以下のサイトが引っかかった。

http://stackoverflow.com/questions/263392/handling-data-in-a-php-json-object

上記のサイトを参考に以下のように記述したところうまくいった。

$obj = json_decode($json);
$obj_items = $obj->code->items;
echo $obj_items[0]->url;

その他、デコード時に配列として利用する方法もあるようだ。

【その他の参考】

PHPでJSONを扱うときに配列の参照について

phpで、json_encodeした配列に、json_decodeするとオブジェクトで返って来てしまう

stdClass Objectの出力(取り出し)

IT起業アカデミア