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文法規則”
}
}