「PHP言語」で「XML」「JSON」データの「読み込み」と「作成」を行う方法を勉強しよう!

WEB上の通信される「データフォーマット」についてや、PHPでそれらのデータを扱う方法について学んでいきたいと思います。

WEB上で扱われるデータフォーマットでは、「XML」と「JSON」がよく利用されているとのことでした。

少しずつ「WEBの仕組み」や「サーバーのプログラムの書き方」を学んでいますが、まだまだ学ぶことが多くて先が長そうです(^^;)

「XML」の仕組み

WEBのデータ通信で利用される「XML(Extensible Markup Language)」について学んでいきたいと思います。

「XML」についていろいろと調べてみると、「HTMLの仲間」みたいな存在だということがわかってきました。

「独自のタグ」なども自由に作れるとのことでした。

といっても、難しいものは全然できないので、簡単なものを作ってみたいと思います。

今回は、「衣服」の情報を保存できるXMLデータを作っていくことにしました。

<?xml version="1.0"?>
<items>
    <item id='1'>
        <name>パーカー</name>
        <price>5200</price>
        <color>gray</color>
        <material>スウェット</material>
    </item>
    <item id='2'>
        <name>カットソー</name>
        <price>2700</price>
        <color>white</color>
        <material>コットン</material>
    </item>
    <item id='3'>
        <name>ワンピース</name>
        <price>6200</price>
        <color>brown</color>
        <material>ポリエステル</material>
    </item>
    <item id='4'>
        <name>チノパン</name>
        <price>7500</price>
        <color>white</color>
        <material>コットン・ポリウレタン</material>
    </item>
    <item id='5'>
        <name>テーラードジャケット</name>
        <price>8200</price>
        <color>black</color>
        <material>ポリエステル・綿</material>
    </item>
</items>

このファイルをPHPで読み込むために、「SimpleXML」というモジュールを利用していきます。

XMLデータの読み込み

このモジュールの中に「XML」データを読み込むための「simplexml_load_file」という関数があります。

この関数の引数にXMLデータを渡すと「SimpleXMLElement」クラスのオブジェクト返ってくるのですが、このオブジェクトを利用することで、「XML」データの操作を行うことができます。

XMLデータのファイルを読み込んで、表示するプログラムを作ってみると、

$xml = simplexml_load_file('sample.xml');

foreach( $xml->item as $item){
    print '<p>【id】' . $item['id'] . '【name】=' . $item->name . ' 【price】=' . $item->price . ' 【color】=' . $item->color . ' 【nmaterial】=' . $item->material . '</p>';
}

のようになりました。

「オブジェクト」のプロパティに「XML」のそれぞれのデータが格納されているので、「->」のアロー演算子でプロパティの値を取り出すことができます。

本来はインターネットで通信を行って、「サーバー」から「XMLデータ」を取得して表示するなどの使い方をするそうです。

XMLの「要素の属性値」は、「ブラケット」で囲んで「属性名」を指定すると、「属性値」も取得することができます。

XMLデータの作成と出力

XMLのコードは、PHPから作成することもできます。

例えば、

$code = "<?xml version='1.0' encoding='UTF-8' ?><items></items>";

$items = new SimpleXMLElement($code);

$item = $items->addChild('item', '');

$item->addChild('name','パーカー');
$item->addChild('price','5200');
$item->addChild('color','gray');
$item->addChild('material','スウェット');

print $items->asXML();

のように、まず「SimpleXMLElement」クラスのインスタンスを作り、「addChild」メソッドで子要素を追加していきます。

最後に「asXML」メソッドでXMLコードを出力しています。

出力結果を確認してみると、

<?xml version="1.0" encoding="UTF-8"?>
<items>
    <item>
        <name>パーカー</name>
        <price>5200</price>
        <color>gray</color>
        <material>スウェット</material>
    </item>
</items>

のように出力されます。

WEB API開発などでは、データベースから情報を取り出してXMLコードを生成する処理が使われているとのことでした。

データベースがあまりよくわかっていないので、今後勉強していきたいと思います。

JSON

「JSON(JavaScript Object Notation)」も、XMLと同じくさまざまなデータの集まりを表現できる仕組みです。

タグを用いず「階層構造」のデータを作ることができますが、今回は「フルーツ」をテーマにJSONデータを作ってみたいと思います。

シンプルなJSONデータを作ってみると、

{"文字列" : "値"}

のようになります。

「値を識別するための文字列」と「値」を「:(コロン)」で区切って指定していきます。

「値」の中にさらに「文字列と値」を入れていくこともできるため、「階層構造」を作ることができます。

例えば、

{"fruits":
    [
        {
            "type":"apple",
            "price":280
        },
        {
            "type":"melon",
            "price":780
        },
        {
            "type":"orange",
            "price":300
        },
        {
            "type":"grape",
            "price":870
        },
        {
            "type":"peach",
            "price":450
        }
    ]
}

のように「fruits」の値に「配列形式」で複数の値を格納することができて、「配列」を表すときは「ブラケット」で囲みます。

JSONデータの読み込み

PHPでJSONデータを読み込むためには、「json_decode」関数を利用します。

$result_decode = json_decode($json);

var_dump($result_decode);

引数に「JSONデータ」を渡すと、戻り値にJSONデータを含んだオブジェクトが返ってきます。

オブジェクトの内容を出力して整形してみると、

object(stdClass)#6 (1) {
    ["fruits"]=> array(5) {
        [0]=> object(stdClass)#1 (2) {
            ["type"]=> string(5) "apple" 
            ["price"]=> int(280) 
        }
        [1]=> object(stdClass)#2 (2) {
            ["type"]=> string(5) "melon" 
            ["price"]=> int(780)
        }
        [2]=> object(stdClass)#3 (2) {
            ["type"]=> string(6) "orange"
            ["price"]=> int(300)
        }
        [3]=> object(stdClass)#4 (2) {
            ["type"]=> string(5) "grape"
            ["price"]=> int(870)
        }
        [4]=> object(stdClass)#5 (2) {
            ["type"]=> string(5) "peach"
            ["price"]=> int(450)
        }
    }
}

のようにPHPであらかじめ用意されている「stdClass」のオブジェクトのプロパティにデータが格納されるようになっています。

プロパティのデータを参照するには、

foreach( $result_decode->fruits as $data ){
    print 'type=' . $data->type . ' price=' . $data->price . '
'; }

のように、プログラムを書くと、

type=apple price=280
type=melon price=780
type=orange price=300
type=grape price=870
type=peach price=450

のように表示されます。

JSONデータの作成

PHPで「JSONデータ」を作成する方法として、「オブジェクト」を元に作る方法があります。

今回は、

class Fruits {
    public $type;
    public $price;

    function  __construct($type, $price){
        $this->type = $type;
        $this->price = $price;
    }
}

のように「フルーツ」を表すクラスを作ってみました。

「オブジェクト」から「JSONデータ」を作るには、「json_encode」関数の引数に、「JSONに変換したいオブジェクト」を渡すと「JSONデータ」を文字列として取得することができます。

「json_encode」関数を利用したプログラムは、

$pine = new Fruits('pine','870');

$pine_json = json_encode($pine);

var_dump($pine_json);

のように作りました。

これを実行してみると、

string(29) "{"type":"pine","price":"870"}" 

のように表示され、ちゃんと「JSONデータ」を文字列で取得することができました。

→(前へ)「PHP言語」のファイル操作の方法を学習しよう

→「Twitter:@satoru78888」

HOMEへ