WebEngine

だらだらと綴る技術系メモ

PHPでJSONを扱う

JSONってなに?

JSON(JavaScript Object Notation)は、テキストフォーマットの一種です。シンプルで 開発者が理解しやすい構造をしており、コンピュータにとっては高速で処理しやすいというすぐれもの。
WebAPIなどを使って引っ張ってくる形式のファイルはCSVXMLJSONのうちどれかですが、 最近の主流はJSON。構造がJavaScript連想配列と似ている(というかそのまま?)ので、はじめて 見る人でも理解しやすい。


PHPJSON処理

下記のようなjsonファイルを用意しました(test.json)。ゲームなんかで使えそうな タイプです。

{
"id" : 24,
"name" : "勇者A",
"status" :
    {
        "hp" : 175,
        "mp" : 50
    },
"item" :
    {
        "money" : 25000,
        "sword" : [
            {
                "name" : "錆びた剣",
                "atk_point" : 50
            },
            {
                "name" : "ライトセーバー",
                "atk_point" : 350
            }
        ]
    }
}

これをPHPで処理します。具体的には下のコードを参照してください。

<?php
$pass = "test.json";
$json = file_get_contents($pass);
if (!empty($json)) {
  $json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');

  // 連想配列として扱いたい場合は、第2引数にtrueを渡す
  $obj = json_decode($json);
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <title>TestJSON</title>
  <meta charset="utf-8">
</head>
<body>

<p>ID: <?=$obj->id?></p>
<p>名前: <?=$obj->name?></p>
<p>HP: <?=$obj->status->hp?></p>
<p>MP: <?=$obj->status->mp?></p>
<p>所持金: <?=$obj->item->money?></p>

<?php foreach ($obj->item->sword as $val): ?>
  <p>剣の名前: <?=$val->name?></p>
  <p>剣の攻撃力: <?=$val->atk_point?></p>
<?php endforeach; ?>

</body>
</html>

WebAPIなんかを利用する場合は$passの部分にURLを書きます。今回はなるべくシンプルにした かったのでこのようなコードになりました。コメントアウトにもあるとおり、連想配列として扱いたい場合、 json_decode()の引数にtrueを渡してやります。 僕はオブジェクトとして扱う方が好きなので 今回は使っていません。

$ary = json_decode($json, true);


説明するまでもないですが、これでjsonの内容がすべて出力されます。