Предопределенные константы

Перечисленные ниже константы определены данным расширением и могут быть доступны только в том случае, если PHP был собран с поддержкой этого расширения или же в том случае, если данное расширение было подгружено во время выполнения.

Следующие константы указывают на тип ошибки, возвращенной функцией json_last_error().

JSON_ERROR_NONE (integer)
Не произошло никаких ошибок. Доступна начиная с PHP 5.3.0.
JSON_ERROR_DEPTH (integer)
Была превышена максимальная глубина стека. Доступна начиная с PHP 5.3.0.
JSON_ERROR_STATE_MISMATCH (integer)
Неверный или поврежденный JSON. Доступна начиная с PHP 5.3.0.
JSON_ERROR_CTRL_CHAR (integer)
Ошибка управляющих символов, вероятно из-за неверного кодирования. Доступна начиная с PHP 5.3.0.
JSON_ERROR_SYNTAX (integer)
Синтаксическая ошибка. Доступна начиная с PHP 5.3.0.
JSON_ERROR_UTF8 (integer)
Поврежденные символы UTF-8, вероятно, из-за неверного кодирования. Эта константа стала доступна начиная с PHP 5.3.3.
JSON_ERROR_RECURSION (integer)

Объект или массив, переданный в функцию json_encode() включает рекурсивные ссылки и не может быть закодирован. Если была передана опция JSON_PARTIAL_OUTPUT_ON_ERROR, то на месте рекурсивных ссылок будет выведен NULL.

Эта константа стала доступна начиная с PHP 5.5.0.

JSON_ERROR_INF_OR_NAN (integer)

Значение, переданное в функцию json_encode() включает либо NAN, либо INF. Если была указана константа JSON_PARTIAL_OUTPUT_ON_ERROR, то вместо указанных особых значений будет выведен 0.

Эта константа стала доступна начиная с PHP 5.5.0.

JSON_ERROR_UNSUPPORTED_TYPE (integer)

В функцию json_encode() было передано значение неподдерживаемого типа, например, resource. Если была указана константа JSON_PARTIAL_OUTPUT_ON_ERROR, то вместо неподдерживаемого значения будет выводиться NULL.

Эта константа стала доступна начиная с PHP 5.5.0.

Следующие константы можно комбинировать для использования в json_encode().

JSON_HEX_TAG (integer)
Все < и > кодируются в \u003C и \u003E. Доступна начиная с PHP 5.3.0.
JSON_HEX_AMP (integer)
Все & кодируются в \u0026. Доступна начиная с PHP 5.3.0.
JSON_HEX_APOS (integer)
Все символы ' кодируются в \u0027. Доступна начиная с PHP 5.3.0.
JSON_HEX_QUOT (integer)
Все символы " кодируются в \u0022. Доступна начиная с PHP 5.3.0.
JSON_FORCE_OBJECT (integer)
Выдавать объект вместо массива при использовании неассоциативного массива. Это полезно, когда принимающая программа или код ожидают объект или же массив пуст. Доступна начиная с PHP 5.3.0.
JSON_NUMERIC_CHECK (integer)
Кодирование строк, содержащих числа, как числа. Доступна начиная с PHP 5.3.3.
JSON_BIGINT_AS_STRING (integer)
Кодирует большие целые числа в виде их строковых эквивалентов. Доступна начиная с PHP 5.4.0.
JSON_PRETTY_PRINT (integer)
Использовать пробельные символы в возвращаемых данных для их форматирования. Доступна начиная с PHP 5.4.0.
JSON_UNESCAPED_SLASHES (integer)
Не экранировать /. Доступна начиная с PHP 5.4.0.
JSON_UNESCAPED_UNICODE (integer)
Не кодировать многобайтные символы Unicode (по умолчанию они кодируются как \uXXXX). Доступна начиная с PHP 5.4.0.

Коментарии

Автор:
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
2014-09-23 03:31:53
http://php5.kiev.ua/manual/ru/json.constants.html
since json_encode expects a UTF-8 string there is no need to encode the € symbol.

I suggest you try to echo : json_encode('€');
It gives: "\u20ac"
I'm running PHP 5.6.5 on the CLI, on MacOS X 10.10
2015-04-24 12:27:24
http://php5.kiev.ua/manual/ru/json.constants.html
Автор:
Updated format values list:

    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_PARTIAL_OUTPUT_ON_ERROR => 512
    JSON_PRESERVE_ZERO_FRACTION => 1024
2015-11-24 15:42:08
http://php5.kiev.ua/manual/ru/json.constants.html
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($arrayJSON_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]
?>
2016-07-07 20:57:21
http://php5.kiev.ua/manual/ru/json.constants.html
In a multi-level array, JSON_FORCE_OBJECT will encode ALL nested numeric arrays as objects. 

If your concern was ONLY the first-level array (e.g., to make it suitable as a MySQL JSON column), you could just cast your first-level array to object, e.g.:

<?php
$json 
json_encode( (object) $arrayJSON_PRESERVE_ZERO_FRACTION+JSON_UNESCAPED_UNICODE );
?>

Or, if you have large arrays and are concerned about the overhead of object casting, you could append a "null" value beyond the size of the array, which will force the array to become associative:

<?php
$beyond 
count$array ) + 1;
if ( !
array_key_exists$beyond$array) )
     
$array$beyond ] = NULL;
$json json_encode$arrayJSON_PRESERVE_ZERO_FRACTION+JSON_UNESCAPED_UNICODE );
?>

Of course, your later code has to treat an element with a "NULL" value the same as "!isset()", if it iterates the array.
2018-05-20 18:53:20
http://php5.kiev.ua/manual/ru/json.constants.html
Автор:
flags JSON_NUMERIC_CHECK and JSON_PRESERVE_ZERO_FRACTION are broken in php 7+ — json_encode((float)8.8) returns "8.8000000000000007", and json_encode((float)8.8, JSON_NUMERIC_CHECK) and json_encode((float)8.8, JSON_PRESERVE_ZERO_FRACTION) return "8.8000000000000007" too.

the only way to fix this is setting "serialize_precision = -1" in php.ini
2018-09-28 11:52:56
http://php5.kiev.ua/manual/ru/json.constants.html
Автор:
Be EXTREMELY cautious when using the code majid4466 at gmail dot com provided, or JSON_NUMERIC_CHECK in general.

For example, in php 7.4 and 8.1 with precision: 14 and serialize_precision: -1 we get:

<?php
$array 
= ['€'55.6666666666666666'http://example.com/some/cool/page''000337''55.6666666666666666'];
echo 
$case1 json_encode($array);
echo 
$case2 json_encode($arrayJSON_UNESCAPED_UNICODE JSON_UNESCAPED_SLASHES );
echo 
$case3 json_encode($arrayJSON_UNESCAPED_UNICODE JSON_UNESCAPED_SLASHES JSON_NUMERIC_CHECK);

[
"\u20ac",55.666666666666664,"http:\/\/example.com\/some\/cool\/page","000337","55.6666666666666666"]
// in $case1, both euro sign and the url change but we also lost a digit in our unquoted float (due to precision)

["€",55.666666666666664,"http://example.com/some/cool/page","000337","55.6666666666666666"]
// in $case2, both euro sign and the url stay exactly the same but we still lost a digit in our unquoted float (due to precision)

["€",55.666666666666664,"http://example.com/some/cool/page",337,55.666666666666664]
// in $case3, we once again keep euro sign and the url intact but this time not only our unquoted float lost a digit
// but the same happened to our quoted float and the number/string lost its leading zeros too

Alsonote that in php 5.x you will probably get some different but equally wrong results as default values may be different and some functions have changed internally as well.
2022-08-06 13:47:11
http://php5.kiev.ua/manual/ru/json.constants.html

    Поддержать сайт на родительском проекте КГБ