JSONデータの扱い方/Web APIの利用

(ブログ記事の一覧は「こちら」)

JSONJavaScript Object Notation)とは、データを定義するためのフォーマットの1つです。同じような考えのフォーマットとして他にはXMLCSVがあります。
最近では、Web APIの実行結果でよく使われるフォーマットとしては、JSONが多く見られます。
JSONは、その名前の通りJavaScriptでデータをパース(解析)するのに適していますが、PHPでも容易にパースするための関数が用意されていますので、その方法を学びましょう。

ここで学ぶこと

参考:

JSON(PHPマニュアル)
json_encode(PHPマニュアル)
json_decode(PHPマニュアル)

例題

作成するもの

json_decode関数を用いて、基本的な形式のJSONデータの読み取り方法について確認していきましょう。

例1

以下のJSONデータをパース(解析)します。シンプルな例です。
ファイル名を「sample_json1.txt」で作成して、後ほど作成するPHPファイルと同じ場所に置いてください。

{
    "user" : {
        "id" : "A1234567",
        "name" : "Taro Yamada"
    }
}

プログラム

以下の処理で、JSONデータを取得することができます。「sample_json1.php」として作成してください。

<?php
    $data = file_get_contents('./sample_json1.txt');

    $results = json_decode($data, true);

    echo($results["user"] . "<br>");
    echo($results["user"]["id"] . "<br>");
    echo($results["user"]["name"] . "<br>");

    var_dump($results);
?>

実行、確認

「sample_json1.txt」に記述している"id"と"name"が取得できていることを確認してください。

例2

以下のJSONデータをパース(解析)します。レイヤーが1つ増えた例です。
ファイル名を「sample_json2.txt」で作成して、後ほど作成するPHPファイルと同じ場所に置いてください。

{
    "user" : {
        "info" : {
            "id" : "A1234567",
            "name" : "Taro Yamada"
        }
    }
}

プログラム

以下の処理で、JSONデータを取得することができます。「sample_json2.php」として作成してください。

<?php
    $data = file_get_contents('./sample_json2.txt');

    $results = json_decode($data, true);

    echo($results["user"] . "<br>");
    echo($results["user"]["info"] . "<br>");
    echo($results["user"]["info"]["id"] . "<br>");
    echo($results["user"]["info"]["name"] . "<br>");

    var_dump($results);
?>

実行、確認

「sample_json2.txt」に記述している"id"と"name"が取得できていることを確認してください。

例3

以下のJSONデータをパース(解析)します。配列を含む例です。
ファイル名を「sample_json3.txt」で作成して、後ほど作成するPHPファイルと同じ場所に置いてください。

{
    "users" : [
        {
            "id" : "A1234567",
            "name" : "Taro Yamada"
        },
        {
            "id" : "B1234567",
            "name" : "Jiro Tanaka"
        },
        {
            "id" : "C1234567",
            "name" : "Ichiro Suzuki"
        }
    ]
}

プログラム

以下の処理で、JSONデータを全て取得することができます。「sample_json3.php」として作成してください。

<?php
    $data = file_get_contents('./sample_json3.txt');

    $results = json_decode($data, true);

    echo($results["users"] . "<br>");
    echo($results["users"][0]["id"] . "<br>");
    echo($results["users"][0]["name"] . "<br>");
    echo($results["users"][1]["id"] . "<br>");
    echo($results["users"][1]["name"] . "<br>");
    echo($results["users"][2]["id"] . "<br>");
    echo($results["users"][2]["name"] . "<br>");

    var_dump($results);
?>

実行、確認

「sample_json3.txt」に記述している"id"と"name"が取得できていることを確認してください。

例4

json_encode関数についても確認してみましょう。こちらは値をJSON形式のデータに返す場合になります。

プログラム

「sample_json_encode.php」として作成してください。

<?php
    $data ='{ "user" : { "id" : "A1234567", "name" : "Taro Yamada" } }';

    $results = json_encode($data);

    echo($results . "<br>");
    var_dump($results);
?>

実行、確認

Warningなどが表示されていなければ成功です。

課題1

例3のJSONデータについて、パース(解析)を行い、HTMLのtableタグを使用して、以下のような表での表示を作成してください。

id name
A1234567 Taro Yamada
B1234567 Ichiro Suzuki
C1234567 Ichiro Suzuki

課題2

Web APIの例として、天気予報API「OpenWeatherMap API」を試してみましょう。

準備

まずはOpenWeatherMap のサイトにアクセスして、右上の「Sign Up」からユーザー登録を行ってください。(無料)
登録が完了すると、APIを利用するための「App ID」が作成されます。

例えば、以下のURLにアクセスすると、現在の東京の天気情報を受け取ることができます。(最後の xxxx ... の部分は、登録時に取得した「App ID」を入力します。)

https://api.openweathermap.org/data/2.5/weather?q=Tokyo&appid=xxxxxxxxxxxxxxxxxxxxxxxx

つまり、Web APIとは、HTTPを通して目的の結果を得ることのできるインターフェースと言えます。

問題

最適な方法とまでは言えないですが、file_get_contents関数を用いてHTTP通信を実行することができます。

<?php
    $results = file_get_contents("https://api.openweathermap.org/data/2.5/weather?q=" . $_GET['city'] . "&appid=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
?>

上記の例は、別画面で地域を設定してからGETで受け取った場合になります。
まずは天気情報の結果のJSONデータ全体を取得してください。
次に、JSONデータのパースを行い、「現在の天気」「気温」「湿度」の結果だけを取り出すプログラムを作成してください。

現在の天気情報についての詳細は、こちらを参照してください。