PHPで外部APIとデータをやり取りしたり、JavaScriptと連携したりする際に欠かせないのがJSON形式です。
この記事では、PHPでJSONを扱う基本として、json_encode()
とjson_decode()
の使い方を解説します。
目次
JSONとは?
JSON(JavaScript Object Notation)は、データをテキスト形式で表現する軽量なフォーマットです。
JSONは「キー」と「値」のペアでデータを表現します。基本の書き方は次の通りです。
{
"キー1": "値1",
"キー2": 数値,
"キー3": true,
"キー4": ["配列", "要素"],
"キー5": {
"サブキー": "サブ値"
}
}
- キーは必ずダブルクオーテーションで囲む必要があります。
- 値には文字列(”テキスト”)、数値、真偽値(true/false)、配列、オブジェクトを指定できます。
- JSONのトップレベルはオブジェクト({})または配列([])で始まります。
例えば、ユーザー情報をJSONで表すと次のようになります。
{
"name": "Alice",
"age": 25,
"email": "alice@example.com",
"hobbies": ["reading", "traveling"]
}
このようにJSONは、構造化されたデータをシンプルに表現でき、PHPやJavaScriptをはじめ、多くの言語で扱えます。
PHPでも連想配列やオブジェクトのデータを簡単にJSONに変換できます。
配列やオブジェクトをJSONに変換する:json_encode()
PHPの配列やオブジェクトをJSON形式に変換したいときは、json_encode()
を使います。
$data = [
'name' => 'Alice',
'age' => 25,
'email' => 'alice@example.com'
];
$json = json_encode($data);
echo $json;
// 出力: {"name":"Alice","age":25,"email":"alice@example.com"}
オプションを使う例
$json_pretty = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
echo $json_pretty;
/*
出力:
{
"name": "Alice",
"age": 25,
"email": "alice@example.com"
}
*/
JSON_PRETTY_PRINT
: 整形して見やすくするJSON_UNESCAPED_UNICODE
: 日本語などをエスケープしない
JSONを配列やオブジェクトに変換する:json_decode()
JSON文字列をPHPのデータに変換するには、json_decode()
を使います。
$json = '{"name":"Bob","age":30}';
$data = json_decode($json, true);
print_r($data);
// 出力: Array ( [name] => Bob [age] => 30 )
第2引数にtrue
を渡すと、連想配列としてデコードします。省略するとオブジェクトになります。
デコード時のオプション例
デコード時には、最大深度やオプションを指定することもできます。
$json = '{"key":"value"}';
$data = json_decode($json, true, 512, JSON_BIGINT_AS_STRING);
このコードでは、4つの引数を指定しています。
- 第1引数
$json
デコードしたいJSON文字列を渡します。ここでは{"key":"value"}
というシンプルなJSONを用意しています。 - 第2引数
true
デコード結果を連想配列として返すかどうかを指定します。true
なら連想配列false
または省略時はPHPオブジェクト
- 第3引数
512
デコード時に許可する最大の階層の深さを指定します。デフォルトは512です。
極端にネストされたJSONを読み込む際の無限ループ防止のためのセーフティです。 - 第4引数
JSON_BIGINT_AS_STRING
非常に大きな整数(PHPの整数型で扱いきれない桁数の数値)を文字列として返すオプションです。
大きなIDや金額などの数値が含まれるJSONを扱う際に便利です。
このコードを実行すると、次のような連想配列になります。
Array
(
[key] => value
)
このように、json_decode()
の第3・第4引数を活用することで、階層が深いJSONや大きな整数を含むJSONを安全に扱えます。
json_last_error()でエラーチェック
json_encode()
やjson_decode()
は失敗した場合、falseを返します。json_last_error()
で直近のJSON操作のエラー内容を確認できます。
$json = '{"name":"Alice"'; // JSON構文エラー
$data = json_decode($json);
if (json_last_error() !== JSON_ERROR_NONE) {
echo 'JSONデコードエラー: ' . json_last_error_msg();
}
まとめ
- json_encode():PHP配列やオブジェクト → JSON文字列に変換
- json_decode():JSON文字列 → PHP配列やオブジェクトに変換
- API連携やAjax通信でJSONは非常に重要。エラーチェックも忘れずに!