Возвращает JSON-представление данных


(PHP 5 >= 5.2.0, PECL json >= 1.2.0)

json_encodeВозвращает JSON-представление данных

Описание

string json_encode ( mixed $value [, int $options = 0 [, int $depth = 512 ]] )

Возвращает строку, содержащую JSON-представление value.

Список параметров

value

value - значение, которое будет закодировано. Может быть любого типа за исключением resource.

Все строковые данные должны быть в кодировке UTF-8.

Замечание:

PHP реализует надмножество JSON, который описан в первоначальном » RFC 4627, - также кодируя и декодируя скалярные типы и NULL. RFC 4627 поддерживает эти значения только в случае, если они находятся внутри массива или объекта.

И хотя это надмножество согласуется с расширенным определением "JSON текста" из новых » RFC 7159 (который старается заменить собой RFC 4627) и » ECMA-404, это все равно может приводить к проблемам совместимости со старыми парсерами JSON, которые строго придерживаются RFC 4627 с кодированием скалярных значений.

options

Битовая маска составляемая из значений 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 констант.

depth

Задает максимальную глубину. Должен быть больше нуля.

Возвращаемые значения

Возвращает 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()

<?php
$arr 
= array('a' => 1'b' => 2'c' => 3'd' => 4'e' => 5);

echo 
json_encode($arr);
?>

Результат выполнения данного примера:

 {"a":1,"b":2,"c":3,"d":4,"e":5} 

Пример #2 Пример использования json_encode(), показывающий действия некоторых его опций

<?php
$a 
= array('<foo>',"'bar'",'"baz"','&blong&'"\xc3\xa9");

echo 
"Обычно: ",     json_encode($a), "\n";
echo 
"Тэги: ",       json_encode($aJSON_HEX_TAG), "\n";
echo 
"Апострофы: ",  json_encode($aJSON_HEX_APOS), "\n";
echo 
"Кавычки: ",    json_encode($aJSON_HEX_QUOT), "\n";
echo 
"Амперсанды: "json_encode($aJSON_HEX_AMP), "\n";
echo 
"Юникод: ",     json_encode($aJSON_UNESCAPED_UNICODE), "\n";
echo 
"Все: ",        json_encode($aJSON_HEX_TAG JSON_HEX_APOS JSON_HEX_QUOT JSON_HEX_AMP JSON_UNESCAPED_UNICODE), "\n\n";

$b = array();

echo 
"Отображение пустого массива как массива: "json_encode($b), "\n";
echo 
"Отображение пустого массива как объекта: "json_encode($bJSON_FORCE_OBJECT), "\n\n";

$c = array(array(1,2,3));

echo 
"Отображение неассоциативного массива как массива: "json_encode($c), "\n";
echo 
"Отображение неассоциативного массива как объекта: "json_encode($cJSON_FORCE_OBJECT), "\n\n";

$d = array('foo' => 'bar''baz' => 'long');

echo 
"Ассоциативный массив всегда отображается как объект: "json_encode($d), "\n";
echo 
"Ассоциативный массив всегда отображается как объект: "json_encode($dJSON_FORCE_OBJECT), "\n\n";
?>

Результат выполнения данного примера:

 Обычно: ["<foo>","'bar'","\"baz\"","&blong&","\u00e9"] Тэги: ["\u003Cfoo\u003E","'bar'","\"baz\"","&blong&","\u00e9"] Апострофы: ["<foo>","\u0027bar\u0027","\"baz\"","&blong&","\u00e9"] Кавычки: ["<foo>","'bar'","\u0022baz\u0022","&blong&","\u00e9"] Амперсанды: ["<foo>","'bar'","\"baz\"","\u0026blong\u0026","\u00e9"] Unicode: ["<foo>","'bar'","\"baz\"","&blong&","é"] Все: ["\u003Cfoo\u003E","\u0027bar\u0027","\u0022baz\u0022","\u0026blong\u0026","é"]  Отображение пустого массива как массива: [] Отображение не ассоциативного массива как объекта: {}  Отображение неассоциативного массива как массива: [[1,2,3]] Отображение неассоциативного массива как объекта: {"0":{"0":1,"1":2,"2":3}}  Ассоциативный массив всегда отображается как объект: {"foo":"bar","baz":"long"} Ассоциативный массив всегда отображается как объект: {"foo":"bar","baz":"long"} 

Пример #3 Пример с последовательными индексами начинающимися с нуля и непоследовательными индексами массивов

<?php
echo "Последовательный массив".PHP_EOL;
$sequential = array("foo""bar""baz""blong");
var_dump(
 
$sequential,
 
json_encode($sequential)
);

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) "{"1":"foo","2":"bar","3":"baz","4":"blong"}"  Последовательный массив с одним удаленным индексом array(3) {   [0]=>   string(3) "foo"   [2]=>   string(3) "baz"   [3]=>   string(5) "blong" } string(33) "{"0":"foo","2":"baz","3":"blong"}" 

Примечания

Замечание:

В случае ошибки кодирования, можно использовать json_last_error() для определения точной ошибки.

Замечание:

При кодировании массива в случае, если его индексы не являются последовательными числами от нуля, то все индексы кодируются в строковые ключи для каждой пары индекс-значение.

Замечание:

Как и эталонный кодировщик JSON, json_encode() будет создавать JSON в виде простого значения (т.е. не объект и не массив), если ему переданы string, integer, float или boolean в качестве входящего значения value. Большинство декодеров воспринимают эти значения как правильный JSON, но некоторые нет, потому что спецификация неоднозначна на этот счет.

Всегда проверяйте, что ваш JSON декодер может правильно обрабатывать данные, которые вы создаете с помощью json_encode().

Смотрите также