1. PHP

PHPでJSONを扱う方法!json_encode/json_decodeを解説

Share

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は非常に重要。エラーチェックも忘れずに!

参考リンク