Php вывод json массива

JSON в PHP

В этом уроке вы узнаете, как кодировать и декодировать данные JSON в PHP.

Что такое JSON

JSON расшифровывается как аббревиатура от J ava S cript O bject N otation. JSON — это стандартный текстовый формат обмена данными, основанный на JavaScript, который представляет собой набор пар .

В JSON, ключи всегда строки, в то время как значение может быть string , number , true или false , null , object или array . Строки должны быть заключены в двойные кавычки » и могут содержать управляющие символы, такие как \n , \t и \ . JSON более компактный, чем xml, поэтому он более предпочтителен для обмена данными между веб-браузером и сервером.

Синтаксис JSON на примерах

Объект JSON может выглядеть так:

Пример

В то время как пример массива JSON будет выглядеть примерно так:

Пример

PHP и JSON

Структуры данных JSON очень похожи на массивы PHP. В языке PHP существуют специальные функции для кодирования и декодирования данных JSON. Это функции json_encode() и json_decode() соответственно. Они уже встроены в ядро PHP, поэтому никаких библиотек подключать не нужно. Обе функции работают только со строковыми данными в кодировке UTF-8.

Читайте также:  font-weight

Кодирование данных JSON в PHP

В PHP функция json_encode() используется для кодирования значения в формат JSON. Кодируемое значение может быть любым типом данных PHP, кроме ресурса, такого как база данных или дескриптор файла.

Синтаксис

Параметры

value — значение, которое будет закодировано. Может быть любого типа за исключением resource. Все строковые данные должны быть в кодировке UTF-8. 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 . depth Задает максимальную глубину. Должен быть больше нуля.

В приведенном ниже примере показано, как кодировать ассоциативный массив PHP в объект JSON:

Пример

65, "Harry"=>80, "John"=>78, "Clark"=>90); echo json_encode($marks); ?>

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

В следующем примере посмотрим, как будут кодироваться кириллические символы:

Пример

65, "Игорь"=>80, "Денис"=>78, "Николай"=>90); echo json_encode($marks); ?>

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

Как видно кириллица кодируется, исправляется это добавлением опции: JSON_UNESCAPED_UNICODE .

Пример

65, "Игорь"=>80, "Денис"=>78, "Николай"=>90); echo json_encode($marks, JSON_UNESCAPED_UNICODE); ?>

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

Точно так же вы можете закодировать индексированный массив PHP в массив JSON, например:

В следующем примере посмотрим, как будут кодироваться кириллические символы:

Пример

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

Если применить параметр JSON_FORCE_OBJECT , то функция json_encode() будет возвращать индексированный массив PHP как объект JSON:

Пример

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

Примечание: Неассоциативный массив может быть закодирован как массив или объект. Однако ассоциативный массив всегда кодируется как объект.

Декодирование данных JSON в PHP

Функция PHP json_decode() используется для декодирования JSON в PHP. Эта функция возвращает значение, декодированное из json в соответствующий тип данных PHP.

Синтаксис

mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )

Параметры

json — json строка (string) для декодирования. Эта функция работает только со строками в UTF-8 кодировке. assoc Если TRUE, возвращаемые объекты будут преобразованы в ассоциативные массивы. depth Указывает глубину рекурсии. options Битовая маска опций декодирования JSON. В настоящий момент поддерживается только JSON_BIGINT_AS_STRING (по умолчанию большие целые числа приводятся к числам с плавающей запятой (float))

В следующем примере показано, как декодировать или преобразовать объект JSON в объект PHP:

Пример

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

Функция json_decode() по умолчанию возвращает объект. Если нужно JSON декодировать в ассоциативный массив, то укажите значение второго параметра $assoc в качестве true . По умолчанию его значение — false :

Пример

'; var_dump(json_decode($json, true)); ?>

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

Доступ к декодированным значениям JSON в PHP

Теперь рассмотрим пример, который показывает, как декодировать данные JSON и получить доступ к отдельным элементам объекта JSON в PHP:

Пример

'; $obj = json_decode($jsonobj); // Доступ к значениям из возвращенного объекта echo $obj->Peter; // вывод 35 echo $obj->Ben; // вывод 37 echo $obj->Joe; // вывод 43 ?>

В этом примере показано, как получить доступ к отдельным элементам ассоциативного массива PHP:

Пример

'; $arr = json_decode($json, true); // Доступ к значениям из ассоциативного массива echo $arr["Peter"]; // вывод: 65 echo $arr["Harry"]; // вывод: 80 echo $arr["John"]; // вывод: 78 echo $arr["Clark"]; // вывод: 90 ?>

Вы также можете перебирать декодированные данные с помощью цикла foreach(), например:

Пример

'; // Декодирование данных JSON в ассоциативный массив PHP $arr = json_decode($json, true); // Перебираем ассоциативный массив foreach($arr as $key=>$value)< echo $key . "=>" . $value . "
"; > echo "
"; // Декодируем данные JSON в объект PHP $obj = json_decode($json); // Перебираем в цикле значения объекта foreach($obj as $key=>$value)< echo $key . "=>" . $value . "
"; > ?>

Извлечение значений из вложенных данных JSON в PHP

Объекты и массивы JSON также могут быть вложенными. Объект JSON может содержать другие объекты JSON, массивы, вложенные массивы, массивы объектов JSON и т.д. В следующем примере показано, как декодировать вложенный объект JSON и распечатать все его значения в PHP:

Пример

 /* Прокручиваем в цикле массив, если значение само по себе является массивом, рекурсивно вызываем функцию else добавляет найденное значение в массив элементов вывода, и увеличивает счетчик на 1 для каждого найденного значения */ foreach($arr as $key=>$value) < if(is_array($value))< printValues($value); >else < $values[] = $value; $count++; >> // Возвращает общее количество и значения, найденные в массиве return array('total' => $count, 'values' => $values); > // Назначаем закодированную строку JSON переменной PHP $json = ' < "book": < "name": "Harry Potter and the Goblet of Fire", "author": "J. K. Rowling", "year": 2000, "characters": ["Harry Potter", "Hermione Granger", "Ron Weasley"], "genre": "Fantasy Fiction", "price": < "paperback": "$10.40", "hardcover": "$20.32", "kindle": "4.11" >> >'; // Декодирование данных JSON в формат ассоциативного массива PHP $arr = json_decode($json, true); // Вызвать функцию и распечатать все значения $result = printValues($arr); echo "

" . $result["total"] . " value(s) found:

"; echo implode("
", $result["values"]); echo "
"; // Вывести одно значение echo $arr["book"]["author"] . "
"; // Вывод: J.K. Rowling echo $arr["book"]["characters"][0] . "
"; // Вывод: Harry Potter echo $arr["book"]["price"]["hardcover"]; // Вывод: $20.32 ?>

Источник

Работа с JSON в PHP

JSON (JavaScript Object Notation) – текстовый формат обмена данными, основанный на JavaScript, который представляет собой набор пар . Значение может быть массивом, числом, строкой и булевым значением.

В PHP поддержка JSON появилась с версии 5.2.0 и работает только с кодировкой UTF-8.

Кодирование

json_encode($value, $options) – кодирует массив или объект в JSON.

$array = array( '1' => 'Значение 1', '2' => 'Значение 2', '3' => 'Значение 3', '4' => 'Значение 4', '5' => 'Значение 5' ); $json = json_encode($array); echo $json;

Как видно кириллица кодируется, исправляется это добавлением опции JSON_UNESCAPED_UNICODE .

$json = json_encode($array, JSON_UNESCAPED_UNICODE); echo $json;

Далее такую строку можно сохранить в файл, или отдать в браузер, например при AJAX запросах.

header('Content-Type: application/json'); echo $json; exit();

Декодирование

Функция json_decode($json) преобразует строку в объект:

$json = ''; $array = json_decode($json); print_r($array);
stdClass Object ( [1] => Значение 1 [2] => Значение 2 [3] => Значение 3 [4] => Значение 4 [5] => Значение 5 )

Если добавить вторым аргументом true , то произойдёт преобразование в массив:

$json = ''; $array = json_decode($json, true); print_r($array);
Array ( [1] => Значение 1 [2] => Значение 2 [3] => Значение 3 [4] => Значение 4 [5] => Значение 5 )

Получение ошибок и их исправление

json_decode() возвращает NULL , если в объекте есть ошибки, посмотреть их можно с помощью функции json_last_error() :

$json = ''; $array = json_decode($json, true); switch (json_last_error())

Посмотреть значения констант JSON:

$constants = get_defined_constants(true); foreach ($constants['json'] as $name => $value) < echo $name . ': ' . $value . '
'; >
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 JSON_UNESCAPED_LINE_TERMINATORS: 2048 JSON_OBJECT_AS_ARRAY: 1 JSON_BIGINT_AS_STRING: 2 JSON_ERROR_NONE: 0 JSON_ERROR_DEPTH: 1 JSON_ERROR_STATE_MISMATCH: 2 JSON_ERROR_CTRL_CHAR: 3 JSON_ERROR_SYNTAX: 4 JSON_ERROR_UTF8: 5 JSON_ERROR_RECURSION: 6 JSON_ERROR_INF_OR_NAN: 7 JSON_ERROR_UNSUPPORTED_TYPE: 8 JSON_ERROR_INVALID_PROPERTY_NAME: 9 JSON_ERROR_UTF16: 10

Если вы хотите распарсить JS объект из HTML страницы или файла, то скорее всего json_decode вернет ошибку т.к. в коде будут управляющие символы или BOM. Удалить их можно следующим образом:

$json = ''; // Удаление управляющих символов for ($i = 0; $i // Удаление символа Delete $json = str_replace(chr(127), '', $json); // Удаление BOM if (0 === strpos(bin2hex($json), 'efbbbf')) < $json = substr($json, 3); >$res = json_decode($json, true); print_r($res);

HTTP-запросы в формате JSON

Некоторые сервисы требуют чтобы запросы к ним осуществлялись в формате JSON, такой запрос можно сформировать в CURL:

$data = array( 'name' => 'snipp.ru' 'text' => 'Отправка сообщения', ); $ch = curl_init('https://example.com'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); $res = curl_exec($ch); curl_close($ch);

А также могут обратится к вашим скриптам в таком формате, чтение JSON запроса.

$data = file_get_contents('php://input'); $data = json_decode($data, true);

Источник

php json_decode how to output array

I want to learn how to parse/output json string into something I can show in html or put into database .. however i am stuck on something that is prob very simple but I’ve spent most of the morning trying to figure out. What I want to understand is why the results of my code above gives me the following result: «items: Array» And not what I want/expect to get:

"items: W 7th Ave" "items: W 8th St" 

5 Answers 5

$string = file_get_contents('./string.json'); $json = json_decode($string); 

if you want to have items: :

foreach ($json['items'] as $address) < echo "items:". $address['address'] ."\n"; >; 

anyway if you are not sure about how an array is built you could print it via:

Array ( [items] => Array ( [0] => Array ( [address] => W 7th Ave ) [1] => Array ( [address] => W 8th St ) ) ) 

now you found out that $json contains just an array ( items ) of two array, then, if you loop it, you will get that array which is printed in your example. As explained above you need to go one step deeper by looping the elements in your items array and print their address element.

@johnktejik depending on your situation, the

HTML tag might help you preserve the helpful whitespace coming from print_r()

Your items are in an array. You could loop through them like this:

foreach ($json['items'] as $address)

BTW, I did do var_dump, print, print_r, switch it back and forth from Object to Array, to try to learn more about array structure etc and also did a bunch of variations of echo, and for and foreach loops, etc to try to get what i wanted from array.

Ok so to summarize, the answers seem to indicate i have to:

  • first get the whole array eg $string (did that)
  • then decode array into $json (did that)
  • then somehow parse out the sub arrays from $json (by doing something like referencing the addresses in array like «items.address» or «[items][address]» etc (i still am not sure from the answers above how to do this .. they hint at it but can’t see syntax etc?)

I tried both answers and got:

Using TaylorOtwell answer:

I got: Address: Array Address: Array

Looks like i need to somehow loop through array a second time within the first foreach to get actual values?

Would it look something like this?

foreach ($json['items'] as $key => $value) < foreach ($json['items']['address'] as $key =>$value) < echo "$key: $value\n"; >; >; 

Источник

Оцените статью