PHP JSON の解析と作成

 
 
JSON (正式名称「JavaScript Object Notation」) は、読み書きが容易な軽量のデータ交換形式であり、Web 開発の分野で広く使用されています。このセクションでは、PHP で JSON データを作成および解析する方法を紹介します。

 

PHP は json_encode() と json_decode() の 2 つの関数を提供し、それぞれ JSON データを作成および解析します。

  • json_encode(): 変数は JSON 形式に変換できます。
  • json_decode(): JSON 形式の文字列を解析できます。

json_encode()

json_encode() 関数は、PHP 変数を JSON データに変換できます。その構文は次のとおりです。

json_encode(mixed $value, int $options = 0, int $depth = 512): 文字列 | false

パラメータの説明は次のとおりです。

  • $value: 変換する変数。変数は任意のデータ型にすることができます。
  • $options: オプションのパラメーター。デフォルト値は 0 で、オプションの値は次の PHP 定数です: JSON_FORCE_OBJECT、JSON_HEX_QUOT、JSON_HEX_TAG、JSON_HEX_AMP、JSON_HEX_APOS、JSON_INVALID_UTF8_IGNORE、JSON_INVALID_UTF8_SUBSTITUTE、JSON_NUMERIC_CHECK、JSON_PARTIAL_OUTPUT_ON _ERROR、JSON_PRESER VE_ZERO_FRACTION、JSON_PRETTY_PRINT、JSON_UNESCAPED_LINE_TERMINATORS、JSON_UNESCAPED_SLASHES 、JSON_UNESCAPED_UNICODE、JSON_THROW_ON_ERROR。これらの定数について知っていれば十分であり、通常はあまり使用されません. JSON 定数を介して特定の意味を確認できます。
  • $depth: An optional parameter, used to set the maximum depth of recursion. その値は 0 より大きい必要があり、既定値は 512 です。$options パラメーターと同様に、このパラメーターもめったに使用されません。

json_encode() 関数は、変換に成功すると文字列型の変換結果を返し、変換に失敗すると false を返します。

[例] json_encode() 関数を使用して、PHP 変数を JSON 形式に変換します。

 
<?php
    $arr = [
        "title"     => "JSONチュートリアル",
        "author"    => "IT基礎",
        "url"       => "https://it-kiso.com/",
        "catalogue" => [
            "JSONとは",
            "JSONPとは",
            "JSON文法規則"
        ]
    ];
    echo json_encode($arr);
?> 

操作の結果は次のとおりです。

{“title”:”JSON \u30c1 \u30e5 \u30fc \u30c8 \u30ea \u30a2 \u30eb”, “author”:”IT\u57fa\u790e”, “url”:”https://it-kiso.com/”, “catalogue”:[“JSON \u3068 \u306f”, “JSONP \u3068 \u306f”, “JSON \u6587 \u6cd5 \u898f \u5247”]}

実行結果からわかるように、json_encode() 関数を使用して変数を JSON データに変換すると、変数内の漢字が Unicode 文字 (\uXXXX 形式の文字) にエンコードされます。 json_encode( ) 関数の 2 番目のパラメーターは、次の例に示すように、JSON_UNESCAPED_UNICODE に設定できます。

 
<?php
    $arr = [
        "title"     => "JSONチュートリアル",
        "author"    => "IT基礎",
        "url"       => "https://it-kiso.com/",
        "catalogue" => [
            "JSONとは",
            "JSONPとは",
            "JSON文法規則"
        ]
    ];
    echo json_encode($arr,JSON_UNESCAPED_UNICODE );
?> 

操作の結果は次のとおりです。

{“title”:”JSONチュートリアル”,”author”:”IT基礎”,”url”:”https://it-kiso.com/”,”catalogue”:[“JSONとは”,”JSONPとは”,”JSON文法規則”]}

json_decode()

json_decode() 関数は、JSON 形式の文字列を解析し、解析結果を変数に保存できます. その構文形式は次のとおりです:

json_decode(string $json, bool $assoc = false, int $depth = 512, int $options = 0): 混合

パラメータの説明は次のとおりです。

  • $json: 必須パラメーター、解析する JSON 文字列。
  • $assoc: オプションのパラメーター。デフォルト値は false です。値が true に設定されている場合、json_decode() 関数は配列を返します。
  • $depth: オプションのパラメーター。再帰の最大深度を設定するために使用されます。デフォルト値は 512 で、0 より大きい値を設定することもできます。
  • $options: オプションのパラメーター、デフォルト値は 0、オプションの値は JSON_BIGINT_AS_STRING、JSON_INVALID_UTF8_IGNORE、JSON_INVALID_UTF8_SUBSTITUTE、JSON_OBJECT_AS_ARRAY、JSON_THROW_ON_ERROR などの定数です。複数の定数を同時に設定でき、定数は縦棒|で区切られます。 .上記の定数の意味については、 PHP 定義済み定数を参照してください。

解析が成功した場合、json_decode() 関数はデータを JSON で返します. 解析が失敗した場合、または JSON のデータの深さが再帰の制限を超えた場合は、null を返します.

[例] json_decode() 関数を使用して JSON データをパースします。

 
<?php
    $str = '{"title":"JSONチュートリアル","author":"IT基礎","url":"http:\/\/it-kiso.com\/","catalogue":["JSONとは","JSONPとは","JSON文法規則"]}';
    echo "<pre>";
    var_dump(json_decode($str, true));
?> 

操作の結果は次のとおりです。

array(4) {
[“title”]=>
string(18) “JSONチュートリアル”
[“author”]=>
string(6) “IT基礎”
[“url”]=>
string(21) “http://it-kiso.com/”
[“catalogue”]=>
array(3) {
[0]=>
string(10) “JSONとは”
[1]=>
string(11) “JSONPとは”
[2]=>
string(14) “JSON文法規則”
}
}

 

「 PHP JSON の解析と作成」についてわかりやすく解説!絶対に観るべきベスト2動画

Working with JSON in PHP | json_encode() and json_decode()
PHP Mysql で動的 JSON ファイルを作成する