PHPのお勉強!

PHP TOP

定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

次の定数は、json_last_error() が返したり、 JsonExceptioncode に格納されている エラーの型を表します。

JSON_ERROR_NONE (int)
エラーが発生しませんでした。
JSON_ERROR_DEPTH (int)
スタックの深さが最大に達しました。
JSON_ERROR_STATE_MISMATCH (int)
アンダーフローあるいはモードの不一致が発生しました。
JSON_ERROR_CTRL_CHAR (int)
制御文字エラー。おそらくエンコードが間違っています。
JSON_ERROR_SYNTAX (int)
構文エラー。
JSON_ERROR_UTF8 (int)
正しくエンコードされていないなど、不正な形式の UTF-8 文字。
JSON_ERROR_RECURSION (int)

json_encode() に渡した配列やオブジェクトに再帰参照が含まれており、エンコードできません。 JSON_PARTIAL_OUTPUT_ON_ERROR オプションを指定した場合は、 再帰参照の部分を null にエンコードします。

JSON_ERROR_INF_OR_NAN (int)
json_encode() に渡した値の中に NAN あるいは INF が含まれています。 JSON_PARTIAL_OUTPUT_ON_ERROR オプションを指定した場合は、 これらの特殊な数値を 0 にエンコードします。
JSON_ERROR_UNSUPPORTED_TYPE (int)
json_encode() が対応していない型、たとえば リソース などが渡されました。 JSON_PARTIAL_OUTPUT_ON_ERROR オプションを指定した場合は、 これらを null にエンコードします。
JSON_ERROR_INVALID_PROPERTY_NAME (int)
JSON オブジェクトを PHP オブジェクトにデコードする際、 json_decode() に渡された文字列に、 \u0000 から始まるキーが含まれていました。
JSON_ERROR_UTF16 (int)
json_decode() に渡された JSON 文字列の中に、 単一の、ペアになっていない UTF-16 のサロゲートコードポイントが含まれていました。

次の定数は、 json_decode() のオプションとして 組み合わせて使用します。

JSON_BIGINT_AS_STRING (int)
巨大な整数値を文字列としてデコードします。
JSON_OBJECT_AS_ARRAY (int)
JSON オブジェクトを PHP の配列としてデコードします。 このオプションは json_decode() の第二引数を true に設定して呼び出すことで、自動的に設定できます。

次の定数は、 json_encode() のオプションとして組み合わせて使用します。

JSON_HEX_TAG (int)
すべての < および > をそれぞれ \u003C および \u003E に変換します。
JSON_HEX_AMP (int)
すべての & を \u0026 に変換します。
JSON_HEX_APOS (int)
すべての ' を \u0027 に変換します。
JSON_HEX_QUOT (int)
すべての " を \u0022 に変換します。
JSON_FORCE_OBJECT (int)
非連想配列を使用した場合に、配列ではなくオブジェクトを出力します。 出力を受け取る側がオブジェクトを期待しており、配列が空っぽである場合などに特に便利です。
JSON_NUMERIC_CHECK (int)
数値形式の文字列を数値としてエンコードします。
JSON_PRETTY_PRINT (int)
返される結果の書式を、スペースを使って整えます。
JSON_UNESCAPED_SLASHES (int)
/ をエスケープしません。
JSON_UNESCAPED_UNICODE (int)
マルチバイト Unicode 文字をそのままの形式で扱います (デフォルトでは \uXXXX にエスケープします)。
JSON_PARTIAL_OUTPUT_ON_ERROR (int)
エンコード不可能な値は代替値に置き換え、処理を続行します。
JSON_PRESERVE_ZERO_FRACTION (int)
float 型の値を常に float 値としてエンコードするようにします。
JSON_UNESCAPED_LINE_TERMINATORS (int)
JSON_UNESCAPED_UNICODE が指定されると、 行の終端をエスケープされないままにします。 PHP 7.1 より前のバージョンでは、 この定数がなくてもそういう振る舞いをしていました。 PHP 7.1.0 以降で使用可能です。

次の定数は、 json_decode() および json_encode() のオプションとして組み合わせて使用します。

JSON_INVALID_UTF8_IGNORE (int)
不正な UTF-8 の文字を無視します。 PHP 7.2.0 以降で使用可能です。
JSON_INVALID_UTF8_SUBSTITUTE (int)
不正な UTF-8 の文字を、\0xfffd に変換します。 (Unicode の 'REPLACEMENT CHARACTER') PHP 7.2.0 以降で使用可能です。
JSON_THROW_ON_ERROR (int)
エラーが起きた場合、 json_last_error()json_last_error_msg() 関数で収集される、 グローバルなエラー状態を設定するかわりに、 JsonException をスローします。 JSON_PARTIAL_OUTPUT_ON_ERRORJSON_THROW_ON_ERROR よりも優先します。 PHP 7.3.0 以降で使用可能です。
JSON_ERROR_NON_BACKED_ENUM (int)
json_encode() に渡される値のうち、 シリアライズできなかった Backed Enum でない値を含んでいることを示します。 PHP 8.1.0 以降で使用可能です。
add a note

User Contributed Notes 6 notes

up
89
majid4466 at gmail dot com
8 years ago
To get a really clean json string use these three constants like so:

<?php
$array
= ['€', 'http://example.com/some/cool/page', '337'];
$bad = json_encode($array);
$good = json_encode($array, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);

// $bad would be ["\u20ac","http:\/\/example.com\/some\/cool\/page","337"]
// $good would be ["€","http://example.com/some/cool/page",337]
?>
up
68
Yzmir Ramirez
10 years ago
If you curious of the numeric values of the constants, as of JSON 1.2.1, the constants have the following values (not that you should use the numbers directly):

JSON_HEX_TAG => 1
JSON_HEX_AMP => 2
JSON_HEX_APOS => 4
JSON_HEX_QUOT => 8
JSON_FORCE_OBJECT => 16
JSON_NUMERIC_CHECK => 32
JSON_UNESCAPED_SLASHES => 64
JSON_PRETTY_PRINT => 128
JSON_UNESCAPED_UNICODE => 256

JSON_ERROR_DEPTH => 1
JSON_ERROR_STATE_MISMATCH => 2
JSON_ERROR_CTRL_CHAR => 3

JSON_ERROR_SYNTAX => 4

JSON_ERROR_UTF8 => 5
JSON_OBJECT_AS_ARRAY => 1

JSON_BIGINT_AS_STRING => 2