- doctor Brain
- json_decode
- Преобразование JSON в объект
- Преобразование JSON в ассоциативный массив
- Заключение
- Новые публикации
- JavaScript: сохраняем страницу в pdf
- HTML: Полезные примеры
- CSS: Ускоряем загрузку страницы
- JavaScript: 5 странностей
- JavaScript: конструктор сортировщиков
- Категории
- О нас
- Работа с JSON в PHP
- Кодирование
- Декодирование
- Получение ошибок и их исправление
- HTTP-запросы в формате JSON
- Как прочитать JSON с помощью PHP
- Как прочитать содержимое файла
- Как получить значение через запятую в массиве данных файла JSON
- Ошибки при выводе JSON
- Читайте также
- Комментарии к статье “ Как прочитать JSON с помощью PHP ” (2)
doctor Brain
Независимо от того, каким образом получены данные в формате JSON: в виде файла *.json переданного из стороннего API или входящей строки, нативный PHP, начиная с версии 5.2.0, предоставляет две замечательные функции json_encode и json_decode . Сегодня мы обратим внимание на функцию json_decode , которая позволяет преобразовать данные JSON в формат, пригодный для дальнейшей работы.
Итак, для начала нам нужны какие-то JSON-данные, и мы получим их, благодаря генератору случайных данных Mockaroo.
json_decode
Преобразование JSON в объект
Входящие JSON-данные всгеда являются строкой, как же их преобразовать? Посмотрим на код приведенный ниже:
$json = '[< "id": 1, "first_name": "Bertrando", "last_name": "Pedrollo", "email": "bpedrollo0@homestead.com", "gender": "Male", "ip_address": "62.137.20.86" >, < "id": 2, "first_name": "Pier", "last_name": "Winkworth", "email": "pwinkworth1@mit.edu", "gender": "Female", "ip_address": "158.139.30.200" >, < "id": 3, "first_name": "Joyous", "last_name": "Glascott", "email": "jglascott2@smh.com.au", "gender": "Female", "ip_address": "146.147.52.106" >, < "id": 4, "first_name": "Daniela", "last_name": "Hawes", "email": "dhawes3@timesonline.co.uk", "gender": "Female", "ip_address": "148.153.203.134" >]'; $decodedJson = json_decode($json); var_dump($decodedJson);
После преобразования JSON-данных с помощью функции json_decode , мы вывели их на странцу. Можно увидеть, что полученный результат — массив объектов (stdClass):
array(4) < [0]=>object(stdClass)#1 (6) < ["id"]=>int(1) ["first_name"]=> string(9) "Bertrando" ["last_name"]=> string(8) "Pedrollo" ["email"]=> string(24) "bpedrollo0@homestead.com" ["gender"]=> string(4) "Male" ["ip_address"]=> string(12) "62.137.20.86" > [1]=> object(stdClass)#2 (6) < ["id"]=>int(2) ["first_name"]=> string(4) "Pier" ["last_name"]=> string(9) "Winkworth" ["email"]=> string(19) "pwinkworth1@mit.edu" ["gender"]=> string(6) "Female" ["ip_address"]=> string(14) "158.139.30.200" > [2]=> object(stdClass)#3 (6) < ["id"]=>int(3) ["first_name"]=> string(6) "Joyous" ["last_name"]=> string(8) "Glascott" ["email"]=> string(21) "jglascott2@smh.com.au" ["gender"]=> string(6) "Female" ["ip_address"]=> string(14) "146.147.52.106" > [3]=> object(stdClass)#4 (6) < ["id"]=>int(4) ["first_name"]=> string(7) "Daniela" ["last_name"]=> string(5) "Hawes" ["email"]=> string(25) "dhawes3@timesonline.co.uk" ["gender"]=> string(6) "Female" ["ip_address"]=> string(15) "148.153.203.134" > >
Теперь мы можем получить нужные данные из переменной decodedJson, использую синтаксис для работы с объектами:
echo $decodedJson[0]->first_name . " " . $decodedJson[0]->last_name; echo "
"; echo $decodedJson[1]->first_name . " " . $decodedJson[1]->last_name; // Результат: // Bertrando Pedrollo // Pier Winkworth
Преобразование JSON в ассоциативный массив
Для того, чтобы результатом преобразования JSON-данных с помощью функции jsin_decode стал ассоциативный массив, а не объект (stdClass), нужно добавить второй параметр $assoc равный true (по умолчанию его значение — false).
$json = '[< "id": 1, "first_name": "Bertrando", "last_name": "Pedrollo", "email": "bpedrollo0@homestead.com", "gender": "Male", "ip_address": "62.137.20.86" >, < "id": 2, "first_name": "Pier", "last_name": "Winkworth", "email": "pwinkworth1@mit.edu", "gender": "Female", "ip_address": "158.139.30.200" >, < "id": 3, "first_name": "Joyous", "last_name": "Glascott", "email": "jglascott2@smh.com.au", "gender": "Female", "ip_address": "146.147.52.106" >, < "id": 4, "first_name": "Daniela", "last_name": "Hawes", "email": "dhawes3@timesonline.co.uk", "gender": "Female", "ip_address": "148.153.203.134" >]'; $decodedJson = json_decode($json, true); var_dump($decodedJson);
array(4) < [0]=>array(6) < ["id"]=>int(1) ["first_name"]=> string(9) "Bertrando" ["last_name"]=> string(8) "Pedrollo" ["email"]=> string(24) "bpedrollo0@homestead.com" ["gender"]=> string(4) "Male" ["ip_address"]=> string(12) "62.137.20.86" > [1]=> array(6) < ["id"]=>int(2) ["first_name"]=> string(4) "Pier" ["last_name"]=> string(9) "Winkworth" ["email"]=> string(19) "pwinkworth1@mit.edu" ["gender"]=> string(6) "Female" ["ip_address"]=> string(14) "158.139.30.200" > [2]=> array(6) < ["id"]=>int(3) ["first_name"]=> string(6) "Joyous" ["last_name"]=> string(8) "Glascott" ["email"]=> string(21) "jglascott2@smh.com.au" ["gender"]=> string(6) "Female" ["ip_address"]=> string(14) "146.147.52.106" > [3]=> array(6) < ["id"]=>int(4) ["first_name"]=> string(7) "Daniela" ["last_name"]=> string(5) "Hawes" ["email"]=> string(25) "dhawes3@timesonline.co.uk" ["gender"]=> string(6) "Female" ["ip_address"]=> string(15) "148.153.203.134" > >
Теперь, для того чтобы получить необходимые данные, нужно использовать синтаксис для работы с массивами:
echo $decodedJson[0]["first_name"] . " " . $decodedJson[0]["last_name"]; echo "
"; echo $decodedJson[1]["first_name"] . " " . $decodedJson[1]["last_name"]; // Результат: // Bertrando Pedrollo // Pier Winkworth
Заключение
Примеры, разбираемые в данной статье, в очередной раз демонстрируют наличие в PHP великолепных нативных функций и замечательной документации. Не поленитесь изучить дополнительную информацию о json_decode на официальном сайте.
Новые публикации
JavaScript: сохраняем страницу в pdf
HTML: Полезные примеры
CSS: Ускоряем загрузку страницы
JavaScript: 5 странностей
JavaScript: конструктор сортировщиков
Категории
О нас
Frontend & Backend. Статьи, обзоры, заметки, код, уроки.
© 2021 dr.Brain .
мир глазами веб-разработчика
Работа с 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);
Как прочитать JSON с помощью PHP
Admin 05.11.2017 , обновлено: 21.12.2017 PHP, WordPress
Формат JSON представляет из себя упорядоченную, определенным образом, информацию. Это альтернатива формату XML, с более минималистической структурой данных. О том, как прочитать эти данные через PHP.
JSON можно прочитать с помощью очень многих языков программирования. Здесь мы будем разбирать пример чтения содержимого файла посредством PHP.
Как прочитать содержимое файла
В переменную f_json заключаем адрес файла JSON:
Затем этот файл достаём по адресу указанному в f_json:
Если заглянуть в JSON файл напрямую, можно увидеть следующие данные:
Иногда в файле данные выглядят так:
Эта «неправильная» кодировка является символами Unicode, записанные в восьмибитной кодировке.
Просмотрим содержимое файла JSON в браузере:
В данном случае будет отдан массив в одну строчку. Ниже строчка разбита, для наглядности, на несколько строк.
object(stdClass)#3896 (1)
< ["response"]=>object(stdClass)#3324 (1)
< ["items"]=>array(1) < [0]=>object(stdClass)#3330 (5)
< ["id"]=>string(4) «1331»
[«title_one»]=> string(40) «Данные заголовка один»
[«title_two»]=> string(38) «Данные заголовка два»
[«Год»]=> string(4) «2056»
[«Items»]=> string(34) «items-1, items-2, items-3, items-4»
> > > >
Для чтения этих данных декодируем строки файла:
Теперь выведем объекты в этом файле. Например, мы хотим достать заголовок один, который находится под ключевым атрибутом title_one. Для этого воспользуемся следующей командой:
Мы сохранили данные в переменную title_one. Теперь с ними можно делать всё что угодно. Например, вывести её:
В этом случае будет показано:
Как получить значение через запятую в массиве данных файла JSON
Пример посложнее. Мы хотим достать отдельные данные для «items-1, items-2, items-3, items-4». Чтобы каждое значение было схвачено в отдельную переменную.
Для этого, сначала мы обратимся к этой строке:
Теперь требуется преобразовать данные из строки в массив. Воспользуемся функцией разбиения строки в PHP:
Теперь мы можем вывести отдельные элементы так:
Причем первое значение выводится с параметром [0]. Так исторически сложилось.
Ошибки при выводе JSON
Если вы сталкиваетесь с командой вроде:
Значит неправильно указан путь к данным.
Читайте также
У сайта нет цели самоокупаться, поэтому на сайте нет рекламы. Но если вам пригодилась информация, можете лайкнуть страницу, оставить комментарий или отправить мне подарок на чашечку кофе.
Комментарии к статье “ Как прочитать JSON с помощью PHP ” (2)
Привет ! подскажи пожалуйста, есть такая задача, скачать и разобрать данные в виде JSON при помощи PHP. Сгенерировать в html страницу , есть ссылка откуда брать json, как это вообще сделать ?? Готовая программа должна скачивать эти данные с файла c помощью ajax
В статье расписано, как разбирать данные json на php. Прочитайте статью и попробуйте сделать что в ней указано. Что касается технологии ajax, то вам отдельно придется её гуглить. На сайте кажется я её ещё не описывал.