json_encode
Returns a string containing the JSON representation of the supplied value . If the parameter is an array or object , it will be serialized recursively.
If a value to be serialized is an object, then by default only publicly visible properties will be included. Alternatively, a class may implement JsonSerializable to control how its values are serialized to JSON .
The encoding is affected by the supplied flags and additionally the encoding of float values depends on the value of serialize_precision.
Parameters
The value being encoded. Can be any type except a resource.
All string data must be UTF-8 encoded.
Note:
PHP implements a superset of JSON as specified in the original » RFC 7159.
Bitmask consisting of 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_PRESERVE_ZERO_FRACTION , JSON_PRETTY_PRINT , JSON_UNESCAPED_LINE_TERMINATORS , JSON_UNESCAPED_SLASHES , JSON_UNESCAPED_UNICODE , JSON_THROW_ON_ERROR . The behaviour of these constants is described on the JSON constants page.
Set the maximum depth. Must be greater than zero.
Return Values
Returns a JSON encoded string on success or false on failure.
Changelog
Version | Description |
---|---|
7.3.0 | JSON_THROW_ON_ERROR flags was added. |
7.2.0 | JSON_INVALID_UTF8_IGNORE , and JSON_INVALID_UTF8_SUBSTITUTE flags were added. |
7.1.0 | JSON_UNESCAPED_LINE_TERMINATORS flags was added. |
7.1.0 | serialize_precision is used instead of precision when encoding float values. |
Examples
Example #1 A json_encode() example
$arr = array( ‘a’ => 1 , ‘b’ => 2 , ‘c’ => 3 , ‘d’ => 4 , ‘e’ => 5 );
?php
The above example will output:
Example #2 A json_encode() example showing some flags in use
echo «Normal: » , json_encode ( $a ), «\n» ;
echo «Tags: » , json_encode ( $a , JSON_HEX_TAG ), «\n» ;
echo «Apos: » , json_encode ( $a , JSON_HEX_APOS ), «\n» ;
echo «Quot: » , json_encode ( $a , JSON_HEX_QUOT ), «\n» ;
echo «Amp: » , json_encode ( $a , JSON_HEX_AMP ), «\n» ;
echo «Unicode: » , json_encode ( $a , JSON_UNESCAPED_UNICODE ), «\n» ;
echo «All: » , json_encode ( $a , JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ), «\n\n» ;
echo «Empty array output as array: » , json_encode ( $b ), «\n» ;
echo «Empty array output as object: » , json_encode ( $b , JSON_FORCE_OBJECT ), «\n\n» ;
echo «Non-associative array output as array: » , json_encode ( $c ), «\n» ;
echo «Non-associative array output as object: » , json_encode ( $c , JSON_FORCE_OBJECT ), «\n\n» ;
$d = array( ‘foo’ => ‘bar’ , ‘baz’ => ‘long’ );
echo «Associative array always output as object: » , json_encode ( $d ), «\n» ;
echo «Associative array always output as object: » , json_encode ( $d , JSON_FORCE_OBJECT ), «\n\n» ;
?>
The above example will output:
Normal: [«»,»‘bar'»,»\»baz\»»,»&blong&»,»\u00e9″] Tags: [«\u003Cfoo\u003E»,»‘bar'»,»\»baz\»»,»&blong&»,»\u00e9″] Apos: [«»,»\u0027bar\u0027″,»\»baz\»»,»&blong&»,»\u00e9″] Quot: [«»,»‘bar'»,»\u0022baz\u0022″,»&blong&»,»\u00e9″] Amp: [«»,»‘bar'»,»\»baz\»»,»\u0026blong\u0026″,»\u00e9″] Unicode: [«»,»‘bar'»,»\»baz\»»,»&blong&»,»é»] All: [«\u003Cfoo\u003E»,»\u0027bar\u0027″,»\u0022baz\u0022″,»\u0026blong\u0026″,»é»] Empty array output as array: [] Empty array output as object: <> Non-associative array output as array: [[1,2,3]] Non-associative array output as object: > Associative array always output as object: Associative array always output as object:
Example #3 JSON_NUMERIC_CHECK option example
echo «Strings representing numbers automatically turned into numbers» . PHP_EOL ;
$numbers = array( ‘+123123’ , ‘-123123’ , ‘1.2e3’ , ‘0.00001’ );
var_dump (
$numbers ,
json_encode ( $numbers , JSON_NUMERIC_CHECK )
);
echo «Strings containing improperly formatted numbers» . PHP_EOL ;
$strings = array( ‘+a33123456789’ , ‘a123’ );
var_dump (
$strings ,
json_encode ( $strings , JSON_NUMERIC_CHECK )
);
?>?php
The above example will output something similar to:
Strings representing numbers automatically turned into numbers array(4) < [0]=>string(7) "+123123" [1]=> string(7) "-123123" [2]=> string(5) "1.2e3" [3]=> string(7) "0.00001" > string(28) "[123123,-123123,1200,1.0e-5]" Strings containing improperly formatted numbers array(2) < [0]=>string(13) "+a33123456789" [1]=> string(4) "a123" > string(24) "["+a33123456789","a123"]"
Example #4 Sequential versus non-sequential array example
echo «Sequential array» . PHP_EOL ;
$sequential = array( «foo» , «bar» , «baz» , «blong» );
var_dump (
$sequential ,
json_encode ( $sequential )
);
?php
echo PHP_EOL . «Non-sequential array» . PHP_EOL ;
$nonsequential = array( 1 => «foo» , 2 => «bar» , 3 => «baz» , 4 => «blong» );
var_dump (
$nonsequential ,
json_encode ( $nonsequential )
);
echo PHP_EOL . «Sequential array with one key unset» . PHP_EOL ;
unset( $sequential [ 1 ]);
var_dump (
$sequential ,
json_encode ( $sequential )
);
?>
The above example will output:
Sequential array array(4) < [0]=>string(3) "foo" [1]=> string(3) "bar" [2]=> string(3) "baz" [3]=> string(5) "blong" > string(27) "["foo","bar","baz","blong"]" Non-sequential array array(4) < [1]=>string(3) "foo" [2]=> string(3) "bar" [3]=> string(3) "baz" [4]=> string(5) "blong" > string(43) "" Sequential array with one key unset array(3) < [0]=>string(3) "foo" [2]=> string(3) "baz" [3]=> string(5) "blong" > string(33) ""
Example #5 JSON_PRESERVE_ZERO_FRACTION option example
The above example will output:
json_encode
Возвращает строку, содержащую JSON-представление value .
Список параметров
value — значение, которое будет закодировано. Может быть любого типа за исключением resource .
Все строковые данные должны быть в кодировке UTF-8.
Замечание:
PHP реализует надмножество JSON, который описан в первоначальном » RFC 4627, — также кодируя и декодируя скалярные типы и NULL . RFC 4627 поддерживает эти значения только в случае, если они находятся внутри массива или объекта.
И хотя это надмножество согласуется с расширенным определением «JSON текста» из новых » RFC 7159 (который старается заменить собой RFC 4627) и » ECMA-404, это все равно может приводить к проблемам совместимости со старыми парсерами JSON, которые строго придерживаются RFC 4627 с кодированием скалярных значений.
Битовая маска составляемая из значений JSON_HEX_QUOT , JSON_HEX_TAG , JSON_HEX_AMP , JSON_HEX_APOS , JSON_NUMERIC_CHECK , JSON_PRETTY_PRINT , JSON_UNESCAPED_SLASHES , JSON_FORCE_OBJECT , JSON_UNESCAPED_UNICODE . Смысл этих констант объясняется на странице JSON констант.
Задает максимальную глубину. Должен быть больше нуля.
Возвращаемые значения
Возвращает JSON закодированную строку ( string ) в случае успеха или FALSE в случае возникновения ошибки.
Список изменений
Версия | Описание |
---|---|
5.5.0 | Добавлен параметр depth . |
5.4.0 | В options были добавлены константы JSON_PRETTY_PRINT , JSON_UNESCAPED_SLASHES , и JSON_UNESCAPED_UNICODE . |
5.3.3 | Константа JSON_NUMERIC_CHECK была добавлена в option . |
5.3.0 | Был добавлен параметр options . |
Примеры
Пример #1 Пример использования json_encode()
$arr = array( ‘a’ => 1 , ‘b’ => 2 , ‘c’ => 3 , ‘d’ => 4 , ‘e’ => 5 );
?php
Результат выполнения данного примера:
Пример #2 Пример использования json_encode() , показывающий действия некоторых его опций
echo «Обычно: » , json_encode ( $a ), «\n» ;
echo «Тэги: » , json_encode ( $a , JSON_HEX_TAG ), «\n» ;
echo «Апострофы: » , json_encode ( $a , JSON_HEX_APOS ), «\n» ;
echo «Кавычки: » , json_encode ( $a , JSON_HEX_QUOT ), «\n» ;
echo «Амперсанды: » , json_encode ( $a , JSON_HEX_AMP ), «\n» ;
echo «Юникод: » , json_encode ( $a , JSON_UNESCAPED_UNICODE ), «\n» ;
echo «Все: » , json_encode ( $a , JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ), «\n\n» ;
echo «Отображение пустого массива как массива: » , json_encode ( $b ), «\n» ;
echo «Отображение пустого массива как объекта: » , json_encode ( $b , JSON_FORCE_OBJECT ), «\n\n» ;
echo «Отображение неассоциативного массива как массива: » , json_encode ( $c ), «\n» ;
echo «Отображение неассоциативного массива как объекта: » , json_encode ( $c , JSON_FORCE_OBJECT ), «\n\n» ;
$d = array( ‘foo’ => ‘bar’ , ‘baz’ => ‘long’ );
echo «Ассоциативный массив всегда отображается как объект: » , json_encode ( $d ), «\n» ;
echo «Ассоциативный массив всегда отображается как объект: » , json_encode ( $d , JSON_FORCE_OBJECT ), «\n\n» ;
?>
Результат выполнения данного примера:
Обычно: [«»,»‘bar'»,»\»baz\»»,»&blong&»,»\u00e9″] Тэги: [«\u003Cfoo\u003E»,»‘bar'»,»\»baz\»»,»&blong&»,»\u00e9″] Апострофы: [«»,»\u0027bar\u0027″,»\»baz\»»,»&blong&»,»\u00e9″] Кавычки: [«»,»‘bar'»,»\u0022baz\u0022″,»&blong&»,»\u00e9″] Амперсанды: [«»,»‘bar'»,»\»baz\»»,»\u0026blong\u0026″,»\u00e9″] Unicode: [«»,»‘bar'»,»\»baz\»»,»&blong&»,»é»] Все: [«\u003Cfoo\u003E»,»\u0027bar\u0027″,»\u0022baz\u0022″,»\u0026blong\u0026″,»é»] Отображение пустого массива как массива: [] Отображение не ассоциативного массива как объекта: <> Отображение неассоциативного массива как массива: [[1,2,3]] Отображение неассоциативного массива как объекта: > Ассоциативный массив всегда отображается как объект: Ассоциативный массив всегда отображается как объект:
Пример #3 Пример с последовательными индексами начинающимися с нуля и непоследовательными индексами массивов
echo «Последовательный массив» . PHP_EOL ;
$sequential = array( «foo» , «bar» , «baz» , «blong» );
var_dump (
$sequential ,
json_encode ( $sequential )
);
?php
echo PHP_EOL . «Непоследовательный массив» . PHP_EOL ;
$nonsequential = array( 1 => «foo» , 2 => «bar» , 3 => «baz» , 4 => «blong» );
var_dump (
$nonsequential ,
json_encode ( $nonsequential )
);
echo PHP_EOL . «Последовательный массив с одним удаленным индексом» . PHP_EOL ;
unset( $sequential [ 1 ]);
var_dump (
$sequential ,
json_encode ( $sequential )
);
?>
Результат выполнения данного примера:
Последовательный массив array(4) < [0]=>string(3) "foo" [1]=> string(3) "bar" [2]=> string(3) "baz" [3]=> string(5) "blong" > string(27) "["foo","bar","baz","blong"]" Непоследовательный массив array(4) < [1]=>string(3) "foo" [2]=> string(3) "bar" [3]=> string(3) "baz" [4]=> string(5) "blong" > string(43) "" Последовательный массив с одним удаленным индексом array(3) < [0]=>string(3) "foo" [2]=> string(3) "baz" [3]=> string(5) "blong" > string(33) ""
Примечания
Замечание:
В случае ошибки кодирования, можно использовать json_last_error() для определения точной ошибки.
Замечание:
При кодировании массива в случае, если его индексы не являются последовательными числами от нуля, то все индексы кодируются в строковые ключи для каждой пары индекс-значение.
Замечание:
Как и эталонный кодировщик JSON, json_encode() будет создавать JSON в виде простого значения (т.е. не объект и не массив), если ему переданы string , integer , float или boolean в качестве входящего значения value . Большинство декодеров воспринимают эти значения как правильный JSON, но некоторые нет, потому что спецификация неоднозначна на этот счет.
Всегда проверяйте, что ваш JSON декодер может правильно обрабатывать данные, которые вы создаете с помощью json_encode() .
Смотрите также
- JsonSerializable
- json_decode() — Декодирует JSON строку
- json_last_error() — Возвращает последнюю ошибку
- serialize() — Генерирует пригодное для хранения представление переменной