php json decode в массив
Руководство по обработке JSON в PHP
JSON расшифровывается как JavaScript Object Notation. JSON — это стандартный легкий формат обмена данными, который просто и быстро анализировать и генерировать.
JSON, как и XML, представляет собой текстовый формат, который легко писать и легко читать как людям, так и для компьютерам, но в отличие от XML, структуры JSON-данных имеют меньшую пропускную способность, чем их версии XML. JSON основан на двух основных структурах:
В то время как пример JSON-массива будет выглядеть примерно так:
Формат обмена данными — это текстовый формат, который используется для обмена данными между различными платформами и операционными системами. JSON — самый популярный и легкий формат обмена данными для веб-приложений.
Парсинг JSON с помощью PHP
Структуры JSON-данных очень похожи на массивы PHP. PHP имеет встроенные функции для кодирования и декодирования данных JSON. Это функции json_encode() и json_decode() соответственно. Обе функции работают только со строковыми данными в кодировке UTF-8.
Кодирование данных JSON в PHP
В PHP функция json_encode() используется для кодирования значения в JSON-формат. Кодируемое значение может быть любым типом данных PHP, кроме ресурса, такого как база данных или дескриптор файла. В приведенном ниже примере показано, как кодировать ассоциативный массив PHP в объект JSON:
Точно так же вы можете закодировать индексированный массив PHP в массив JSON, например:
Как вы можете видеть в приведенных выше примерах, неассоциативный массив может быть закодирован как массив или объект. Однако ассоциативный массив всегда кодируется как объект.
Декодирование данных JSON в PHP
Расшифровать или декодировать JSON-данные так же просто, как и закодировать. Вы можете использовать PHP-функцию json_decode() для преобразования закодированной JSON-строки в соответствующий тип данных PHP. В следующем примере показано, как декодировать или преобразовать объект JSON в объект PHP.
Теперь давайте рассмотрим пример, который покажет вам, как декодировать JSON-данные и получить доступ к отдельным элементам объекта или массива JSON в PHP.
Извлечение значений из вложенных JSON-данных в PHP
Объекты и массивы JSON также могут быть вложенными. Объект JSON может произвольно содержать другие объекты JSON, массивы, вложенные массивы, массивы объектов JSON и т. д. В следующем примере показано, как декодировать вложенный объект JSON и распечатать все его значения в PHP.
json_decode
(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL json >= 1.2.0)
json_decode — Декодирует строку JSON
Описание
Принимает закодированную в JSON строку и преобразует её в переменную PHP.
Список параметров
Строка ( string ) json для декодирования.
Эта функция работает только со строками в кодировке UTF-8.
PHP реализует надмножество JSON, который описан в первоначальном » RFC 7159.
Максимальная глубина вложенности структуры, для которой будет производиться декодирование.
Возвращаемые значения
Список изменений
Примеры
Пример #1 Примеры использования json_decode()
Результат выполнения данного примера:
Пример #2 Доступ к свойствам объектов с неправильными именами
Доступ к элементам объекта, которые содержат символы, недопустимые в соответствии с соглашением об именах PHP (то есть дефис), может быть выполнен путём обрамления имени элемента фигурными скобками и апострофами.
Пример #3 Распространённая ошибка при использовании json_decode()
// Следующие строки являются валидным кодом JavaScript, но не валидными JSON-данными
Пример #4 Ошибки с глубиной вложенных объектов ( depth )
Результат выполнения данного примера:
Пример #5 json_decode() с большими целыми числами
Результат выполнения данного примера:
Примечания
В случае возникновения ошибки декодирования можно использовать json_last_error() для определения её причины.
Смотрите также
(PHP 5 >= 5.2.0, PECL json >= 1.2.0, PHP 7)
json_decode — Декодирует JSON строку
Описание
Принимает закодированную в JSON строку и преобразует ее в переменную PHP.
Список параметров
json строка ( string ) для декодирования.
Эта функция работает только со строками в UTF-8 кодировке.
И хотя это надмножество согласуется с расширенным определением «JSON текста» из новых » RFC 7159 (который старается заменить собой RFC 4627) и » ECMA-404, это все равно может приводить к проблемам совместимости со старыми парсерами JSON, которые строго придерживаются RFC 4627 с кодированием скалярных значений.
Указывает глубину рекурсии.
Битовая маска опций декодирования JSON. В настоящий момент поддерживается только JSON_BIGINT_AS_STRING (по умолчанию большие целые числа приводятся к числам с плавающей запятой (float))
Возвращаемые значения
Примеры
Пример #1 Пример использования json_decode()
Результат выполнения данного примера:
Пример #2 Доступ к свойствам объектов с неправильными именами
Доступ к элементам объекта, которые содержат символы недопустимые согласно соглашению об именах PHP (т.е. дефис), может производиться путем обрамления имени элемента фигурными скобками и апострофами.
Пример #3 Распространенная ошибка при использовании json_decode()
// Следующие строки являются валидным кодом JavaScript, но не валидными JSON данными
Пример #4 Ошибки с глубиной вложенных объектов ( depth )
Результат выполнения данного примера:
Пример #5 json_decode() с большими целыми числами
Результат выполнения данного примера:
Примечания
Спецификация JSON не тоже самое, что и JavaScript, но является его частью.
В случае ошибки декодирования можно использовать json_last_error() для определения ее причины.
Список изменений
Смотрите также
json_decode PHP
Введение
Попробуем разобраться с обработкой JSON средствами PHP
Простейший JSON
Предположим, что у нас есть следующий JSON
Cделаем json_decode без дополнительных параметров
var_dump ( json_decode ($json));
object(stdClass)#1 (5) < ["a"]=>int(1) [«b»]=> int(2) [«c»]=> int(3) [«d»]=> int(4) [«e»]=> int(5) >
var_dump ( json_decode ($json, true));
В первом случае var_dump возвращает объект а во втором массив
здесь ничего не получится вывести
Попробуем вытащить из массива отдельные элементы
JSON с вложением
Усложним задачу. Пусть теперь JSON содержит вложения второго уровня.
Попробуем достать один из вложенных элементов
Как Вы можете видеть, обычные элементы по-прежнему доступны. Новые элементы возвращают Array если обратиться к верхнему уровню, либо значение, если обратиться к элементу массива.
JSON с массивом
Массивы заключены в квадратные скобки. Предположим, что он довольно простой.
Чтобы обратиться к элементу массива нужно сперва указать его индекс в квадратных скобках.
Достанем по элементу из первой части массива <"a_item_1":11,"a_item_2" : 12, «a_item_3» : 13> и из второй <"a_item_4":14,"a_item_5" : 15, «a_item_6» : 16>
Ожидаем получить 13 и 16
Реальный пример
Сайту HeiHei.ru нужно получить информацию о пробках на границе с Финляндией.
Для этого он обращается к API сайта narganitse.ru. Который выглядит следующим образом
Этот API актуален по крайней мере на февраль 2020-го года. Последняя версия доступна на сайте
Посмотрим, как выглядит необработанный JSON, который мы получили от API.
Теперь применим json_decode
$border_obj = json_decode ($json_border,true);
Убедимся, что это массив.
И посмотрим содержимое. С помощью
Первый найти легко: [0]=> array(6)
Второй начинается в середине: [1]=> array(6)
Достанем количество машин, дату, комментарий, изменение количества, автора, и время ожидания присланые пользователем на выезде из России через Торфяновку
20
1627688367
Медленно движемся хотя машин не много. Финляндия пускают всех.
20
Ватанен
24
Дата дана в формате epoch time. Подробнее можете прочитать в моей статье Epoch Time
Теперь повторим, но для Светогорска и на въезд в Россиию
JSON в PHP: примеры json_encode, json_decode, работа с кириллицей и utf-8
Давайте разберем, как работает JSON в PHP
Подробную документацию всегда можно найти по этой ссылке:
Кодирование при помощи функции json_encode
Функция работает только с кодировкой UTF-8.
Рассмотрим простой пример:
Результат выполнения кода:
Как видим ассоциативный массив превратился в обычную json строку.
Более сложный пример:
Результат выполнения кода:
Что произошло c кириллицей?
Дело в том, что по умолчанию многобайтовые символы Unicode кодируются как \uXXXX. При раскодировании функцией json_decode они преобразуются в нормальные строки. В некоторых случаях мы можем захотеть избежать этого экранирования, например, чтобы посмотреть как выглядит наш JSON.
Для этого воспользуемся флагом JSON_UNESCAPED_UNICODE:
Получаем такой результат:
Мы может еще в целях изучения кода преобразовать его в более человеческий вид, при помощи дополнительного флага JSON_PRETTY_PRINT
Получаем такой результат:
Мы разобрались, как кодировать наши переменные в формат JSON при помощи json_encode.
Другие предопределенные константы с префиксом JSON_ https://www.php.net/manual/ru/json.constants.php
Декодирование c помощью json_decode
Допустим у нас есть строка в формате JSON. Возьмем ее из предыдущего примера:
Давайте раскодируем ее:
У нас получился результат:
Видим, что это тип переменной stdClass. То есть несмотря на то, что мы изначально кодировали в json обычный ассоциативный массив, в результате декодирования у нас получился объект. Подробнее об этом поведении написано здесь: https://phpstack.ru/php/json_decode-kak-perevesti-rezultat-v-massiv.html
Как нам все таки получить обычный массив? Нужно в json_decode передать вторым параметром true:
Теперь мы получили обычный массив. Таким образом разобрались как работать с функцией json_decode для декодирования строки формата JSON.
Обработка ошибок
В случае ошибки, эти функции просто молча возвращают null.
Мы можем проверить, что нам вернулось null и посмотреть какая произошла ошибка следующим образом:
Иногда нам может быть полезно не молчаливо возвращать null, а выкинуть Exception и обработать его. PHP >7.3 предоставляет нам такую возможность.
Это можно сделать при помощи флага JSON_THROW_ON_ERROR
Теперь результат этого кода JsonException с сообщением Syntax error
Более подробно про обработку ошибок JSON:
Как вывести JSON ответ на ajax запрос
Когда к нашему PHP скрипту обращается например javascript с ajax запросом, для того, чтобы подгрузить на страницу новые данные, то часто возникает необходимость ответить в формате JSON.
Для того, чтобы это сделать, нужно отправить заголовок Content-type:application/json;charset=utf-8 и просто вывести строку с закодированными данными.
Содержимое файла text_json.php
Тем временем в javascript мы можем обратиться к нашему php скрипту таким образом:
Отправка JSON запросов на другой сервер.
Некоторые интернет сервисы принимает запросы в формате JSON. Давайте рассмотрим простой пример как отправить такой запрос.