以前、PHPで応答をJSON形式で返す方法をご紹介しました。今回は、JSON(ジェイソン、JavaScript Object Notation)を受信した時にPHPでオブジェクト毎にパース(解析)して、連想配列に格納する方法をご紹介します。
次のようなJSON形式のデータを受信したとします。今回はこの内容をresponse.jsonというファイルを作って、ファイルの内容を以下のようにしておきます。
response.json
{ "name":"アイスケット", "address":"神奈川県", "work":{ "program":"PHP", "design":"CSS", "database":"MySQL" } }
次にPHPですが、先ほどのresponse.jsonと同じフォルダにPHPファイルを作ってください。
<?php // ファイルからJSONを読み込み $json = file_get_contents("response.json"); // 文字化けするかもしれないのでUTF-8に変換 $json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); // オブジェクト毎にパース // trueを付けると連想配列として分解して格納してくれます。 $obj = json_decode($json, true); // パースに失敗した時は処理終了 if ($obj === NULL) { return; } // 表示 // アイスケット echo $obj['name']; // 表示 // PHP echo $obj['work']['program']; ?>
上記の例は連想配列でパースしたものですが、オブジェクト形式のまま返す方法もあります。先程と違うのはjson_decode関数にtrueを付けないところと、オブジェクトへのアクセスが波括弧となるところです。
<?php // ファイルからJSONを読み込み $json = file_get_contents("response.json"); // 文字化けするかもしれないのでUTF-8に変換 $json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); // オブジェクト毎にパース // trueを付けると連想配列として分解して格納してくれます。 $obj = json_decode($json); // パースに失敗した時は処理終了 if ($obj === NULL) { return; } // 表示 // アイスケット echo $obj->{'name'}; // 表示 // PHP echo $obj->{'work'}->{'program'}; ?>
Amazon SNSからの応答をHTTPで受け取る場合は指定したエンドポイントにPOSTで投げてくるので、この方法を用いてやれば通知内容を解析することができます。
本日は以上です。
Pingback: PHPで外部JSONファイル読み込んでパースする | egoblock