JSONデータを読み込もう – json_decode

メンバーシップ(月額 980円)になって、このページの動画を見よう

XMLに変わって近年非常に良く使われているデータ形式にJSON(JavaScript Object Notation)という形式があります。もともと、JavaScriptのためのデータ形式でしたが、使いやすさなどから他のプログラミング言語でも利用できるようになり、PHPにも簡単に扱うためのファンクションが準備されています。

JSONとは

JSONは、次のような形式から成り立っています。

{
  "キー": "値",
  "キー": [
    {
      "キー": "値",
      "キー": "値"
    },
    {
      "キー": "値",
      "キー": "値"
    }
  ]
}

キーと値のセットになっているため、各データを扱いやすいという点はXMLと似ていますが、XMLのようにタグ名や終了タグがないため、ファイルサイズを抑えることができます。

JSONファイルを準備しよう

まずは、JSONファイルを準備しましょう。ここでは、次のページからJSONのサンプルをダウンロードします。

Cmd+S(Ctrl+S)を押してファイルを保存したら、てきとうな場所に「feed.json」などのファイル名で保存しましょう。そしたら、JSONファイルと同じ場所に「sample18.php」という名前のPHPファイルを作成します。

そしたら、まずはJSONファイルを読み込みます。これには、通常のテキストファイルなどと同様にfile_get_contentsを利用します。

<?php
$file = file_get_contents('feed.json');

そしたら、$fileにJSONファイルの内容が入るので、これをjson_decodeを使って分解します。

$json = json_decode($file);

これで、JSON内の要素を取り出すことができます。例えば、次のようなJSONデータがあったとしましょう。

{
  ...
  "title": "¥u3068¥u3082¥u3059¥u305f",
  ...
}

この場合、titleというキーを使って、次のようにして取り出すことができます。画面に表示してみましょう。

$echo $json->title;

これで、画面にはタイトルが表示されます。

なお、「¥u3068」などは実際には日本語文字ですが、ここではエスケープ処理というのがされていて、一文字ごとにコードになっています。json_decodeを利用したタイミングで日本語文字に戻す事ができます。

配列を処理しよう

JSONには、次のように複数の要素を含めることができます。

{
  "items": [
    {
      "id": "...",
      "title": "..."
    },
    {
      "id": "...",
      "title": "..."
    }
  ]
}

この場合、次のようにPHPの配列として取り出すことができます。

echo $json->items[0]->title;

そのため、この配列をforeach構文などを使って繰り返し処理する事ができます。次のようにして、すべてのタイトルをリストに出力してみましょう。

...
foreach ($json->items as $item):
?>
・<a href="<?php echo $item->url; ?>"><?php echo $item->title; ?></a><br>
<?php
endforeach;
?>

次のように、リンク付きのタイトルが一覧されます。

こうして、JSONデータを処理してPHPの変数や配列として扱うことができます。

ともすたチャンネルに
チャンネル登録する