PHP と JSON
1. JSONとは何か?
JSONは「JavaScript Object Notation」の略称で、データの保存や交換に使用される標準的な構文です。
JSON形式はテキストベースのフォーマットであるため、サーバー間での送受信が非常に容易であり、あらゆるプログラミング言語でデータ形式として採用されています。
2. PHP と JSON
PHPには、JSONを扱うための便利な組み込み関数が用意されています。
本ガイドでは、主に以下の2つの関数に焦点を当てます:
json_encode()json_decode()
3. PHP - json_encode()
json_encode() 関数は、PHPの値をJSON形式にエンコード(変換)するために使用されます。
3.1 連想アレイをJSONオブジェクトにエンコードする例
この例では、連想アレイ(Associative Array)をJSONオブジェクトに変換する方法を示します。
<?php
// PHPの連想アレイを定義
$age = array("Peter"=>35, "Ben"=>37, "Joe"=>43);
// JSON形式にエンコードして出力
echo json_encode($age);
?>3.2 インデックス付きアレイをJSONアレイにエンコードする例
この例では、インデックス付きアレイ(Indexed Array)をJSONアレイに変換する方法を示します。
<?php
// 通常のアレイを定義
$cars = array("Volvo", "BMW", "Toyota");
// JSON形式にエンコードして出力
echo json_encode($cars);
?>4. PHP - json_decode()
json_decode() 関数は、JSONオブジェクトをPHPのオブジェクト、または連想アレイにデコード(復元)するために使用されます。
4.1 JSONデータをPHPオブジェクトにデコードする例
デフォルトでは、json_decode() はデータをオブジェクトとして返します。
<?php
$jsonobj = '{"Peter":35,"Ben":37,"Joe":43}';
// JSONをデコード(デフォルトはオブジェクト型)
var_dump(json_decode($jsonobj));
?>4.2 JSONデータをPHP連想アレイにデコードする例
関数の第2パラメータを true に設定すると、JSONオブジェクトはPHPの連想アレイとしてデコードされます。
<?php
$jsonobj = '{"Peter":35,"Ben":37,"Joe":43}';
// 第2引数にtrueを指定して連想アレイとして取得
var_dump(json_decode($jsonobj, true));
?>5. デコードされた値へのアクセス
デコードされたデータが「オブジェクト」か「連想アレイ」かによって、値へのアクセス方法が異なります。
5.1 PHPオブジェクトから値にアクセスする例
オブジェクトの場合は、アロー演算子(->)を使用します。
<?php
$jsonobj = '{"Peter":35,"Ben":37,"Joe":43}';
$obj = json_decode($jsonobj);
// プロパティとしてアクセス
echo $obj->Peter;
echo $obj->Ben;
echo $obj->Joe;
?>5.2 PHP連想アレイから値にアクセスする例
連想アレイの場合は、通常の配列アクセス([])を使用します。
<?php
$jsonobj = '{"Peter":35,"Ben":37,"Joe":43}';
$arr = json_decode($jsonobj, true);
// キーを指定してアクセス
echo $arr["Peter"];
echo $arr["Ben"];
echo $arr["Joe"];
?>6. 値のループ処理
foreach ループを使用して、デコードされたすべての値を走査することができます。
6.1 PHPオブジェクトの値をループする例
オブジェクトに対してループ処理を行う方法です。
<?php
$jsonobj = '{"Peter":35,"Ben":37,"Joe":43}';
$obj = json_decode($jsonobj);
foreach($obj as $key => $value) {
echo $key . " => " . $value . "<br>";
}
?>6.2 PHP連想アレイの値をループする例
連想アレイに対してループ処理を行う方法です。
<?php
$jsonobj = '{"Peter":35,"Ben":37,"Joe":43}';
$arr = json_decode($jsonobj, true);
foreach($arr as $key => $value) {
echo $key . " => " . $value . "<br>";
}
?>