定義済み定数
以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。
次の定数は、json_last_error() が返したり、 JsonException の code に格納されている エラーの型を表します。
-
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_ERROR
はJSON_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
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]
?>
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