🏠 | 💻 IT | Программирование Code | PHP |

json_decode PHP

Введение

Попробуем разобраться с обработкой JSON средствами PHP

Простейший JSON

Предположим, что у нас есть следующий JSON

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'

Сделаем 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));

array(5) { ["a"]=> int(1) ["b"]=> int(2) ["c"]=> int(3) ["d"]=> int(4) ["e"]=> int(5) }

В первом случае var_dump возвращает объект а во втором массив

$json_decode = json_decode($json); $json_decode_true = json_decode($json,true); echo $json_decode;

здесь ничего не получится вывести

echo $json_decode_true;

Array

Попробуем вытащить из массива отдельные элементы

echo $json_decode_true["a"]; echo'<br>; echo $json_decode_true["b"];

1
4

JSON с вложением

Усложним задачу. Пусть теперь JSON содержит вложения второго уровня.

$json2 = ' { "a":{"a_item_1":11,"a_item_2" : 12, "a_item_3" : 13}, "b":2,"c":3, "d":{"d_item_1":41,"d_item_2" : 42, "d_item_3" : 43},"e":5 }' ;

Попробуем достать один из вложенных элементов

$json_decode_true2 = json_decode($json2,true); echo $json_decode_true2["c"]; echo'<br>; echo $json_decode_true2["d"]; echo'<br>; echo $json_decode_true2["d"]["d_item_2"];

3
Array
42

Как Вы можете видеть, обычные элементы по-прежнему доступны. Новые элементы возвращают Array если обратиться к верхнему уровню, либо значение, если обратиться к элементу массива.

JSON с массивом

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

{ "a": [{ "a_item_1": 11, "a_item_2": 12, "a_item_3": 13 }, { "a_item_4": 14, "a_item_5": 15, "a_item_6": 16 } ], "b": 2, "c": 3, "d": { "d_item_1": 41, "d_item_2": 42, "d_item_3": 43 }, "e": 5 }

Чтобы обратиться к элементу массива нужно сперва указать его индекс в квадратных скобках.

Достанем по элементу из первой части массива {"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

$json_decode_true3 = json_decode($json3, true); echo $json_decode_true3["a"]; echo'<br>; echo $json_decode_true3["a"][0]["a_item_3"]; echo'<br>; echo $json_decode_true3["a"][1]["a_item_6"];

Array
13
16

Реальный пример

Сайту HeiHei.ru нужно получить информацию о пробках на границе с Финляндией.

Для этого он обращается к API сайта narganitse.ru. Который выглядит следующим образом

[ { // Из России "1": { // Торфяновка "number": "12", // Число машин "date": 1325513571, // UNIX-время, когда было получено сообщение "comment": "", // Комментарий "changes": -11, // Изменение относительно предыдущего сообщения "author": "test", // Имя автора комментария "url": "", "waiting": 15 // Примерное время ожидания }, "2": { // Брусничное "number": "0", "date": 1303291117, "comment": "", "changes": -55, "author": "***0606", "url": "", "waiting": 0 }, "3": { // Светогорск "number": "35", "date": 1303287127, "comment": "машин не много: 30-35. только подъехали и пока стоим.", "changes": -20, "author": "Explorer002", "url": "", "waiting": 42 } }, { // В Россию "1": { "number": "13", "date": "1326638542", "comment": "", "changes": -32, "author": "***2117", "url": "", "waiting": 16 }, "2": { "number": "60", "date": 1303294658, "comment": "", "changes": 40, "author": "granitsa-online.com", "url": "http://granitsa-online.com", "waiting": 72 }, "3": { "number": "0", "date": 1303279308, "comment": "", "changes": -12, "author": "Logan", "url": "", "waiting": 0 } } ]

Этот API актуален по крайней мере на февраль 2020-го года. Последняя версия доступна на сайте

$api_address = "http://api.nagranitse.ru/data.json"; $json_border = file_get_contents($api_address);

Посмотрим, как выглядит необработанный JSON, который мы получили от API.

echo $json_border;

[{"1":{"number":"1","date":1601955823,"comment":"Уважаемые, по недвижимости из России никого не выпускают. Фино возможно и пускают к себе, но на законодательном уровне России не закреплен выезд из РФ по недвижимости. Не теряйте зря своё время. Если есть вопросы, звоните в Пограничное управление.","changes":0,"author":"Макс","url":"","last_comment":"Николай, на всякий случай побыл в UK 3 дня. В Фин ренткар","last_comment_author":"Максим","last_comment_date":1602572751,"waiting":2},"2":{"number":"1","date":1601888757,"comment":"Что пишет Лина, это все теория из интернета. Откликнетесь те кто пытался проехать. У меня есть данные, что пускают.","changes":0,"author":"Игорь","url":"","last_comment":"путаница с рассказом про "3-е финское авто". Знающие правила врем.ввоза авто в Россию,поймет. И смахивает на сказку в которую дачники хотят верить.Был тут ранее один "ОЛЕГ" - нес пургу про езду через Вяртсиля. послали...","last_comment_author":"Финский не у дачник","last_comment_date":1603175331,"waiting":2},"3":{"number":"0","date":1596204849,"comment":"Куплю сыр из финки, килограммовый куски - Мильбона или из Призмы, за 700","changes":-3,"author":"Антон","url":"","last_comment":"Люди!!! Выпускают из России или нет? У кого есть недвижимость в Финляндии","last_comment_author":"Лиля","last_comment_date":1602362641,"waiting":0},"4":{"number":"1","date":1598005875,"comment":"Валера граница откроют примерно март-апрель 2021 г. так мне сказал один подполковник пограничной службы Карелии","changes":-3,"author":"Водитель фуры","url":"","last_comment":"Кто едет 30.07-01.07 в Финку через бруснике, можете передать документы, там 2 листочка конверт не запечатан. За оплату","last_comment_author":"Юлия","last_comment_date":1596033576},"5":{"number":"1","date":1601929549,"comment":"Тоже очень ждём инфо! Впускают только самих владельцев? Квартира оформлена на маму-пенсионерку, одна она не справится. Напишите, кто проехал!","changes":1,"author":"Маргарита","url":"","last_comment":"Мои друзья звонили в русскую вет. службу Иматра. Русские выпускают со справкой и документами на недвижимость. Финам этого тоже достаточно. Хочу реальных подтвеждений.","last_comment_author":"Игорь","last_comment_date":1601908944},"6":{"number":"5","date":1584465485,"comment":"❗Иностранные граждане находящиеся на территории Финляндии могут свободно покинуть её после 19.3. Граждане РФ могут это сделать на а\/м (Иматра - на велосипеде)","changes":0,"author":"Хорь","url":"","last_comment":"Павликбот заканчивай понос размазывать со своей вяртисяй. Границы закрыты дурашка.","last_comment_author":"Гопота","last_comment_date":1584599269}},{"1":{"number":"3","date":1596989427,"comment":"У нас гражд.Швеции и России. Русские номера. Измерили темп, мы заполнили бланк, что въехали. Вещей с собой не было почти. Спрашивали нас про декларируемый товар","changes":0,"author":"Татьяна Л","url":"","last_comment":"Я тоже из Швеции номера шведские","last_comment_author":"Лина","last_comment_date":1596990521,"waiting":4},"2":{"number":"0","date":1596204981,"comment":"куплю самый дешевый сыр из Финки за 700-750 р ( Мильбона или из Призмы за 3,75","changes":-7,"author":"Антон","url":"","last_comment":"Пропускают на легковых? Есть кто проезжал? Найдите время дать ответ. Очень нужно...","last_comment_author":"оля","last_comment_date":1586265072,"waiting":0},"3":{"number":"0","date":1602965682,"comment":"Никого! Понятно почему! Наши шерстят и взвешивают продукты) Но очень вежливы!)","changes":-6,"author":"Максим","url":"http:\/\/granitsa-online.com\/Pages\/Splash.aspx","last_comment":"Лиза,позвоните на таможню,вы уже одно и тоже третий день спрашиваете.","last_comment_author":"Galina","last_comment_date":1584714680,"waiting":0},"4":{"number":"1","date":1601842408,"comment":"Выезд в 11.30 в понедельник 05.10.2020.Возьму 2 попутчиков из Котки еду до Питера- могу до Выборга довезти. Пассажирам налегке. Ватсап 89219692239","changes":-1,"author":"Лина","url":"","last_comment":"Реально","last_comment_author":"Фантомас","last_comment_date":1585069860},"5":{"number":"0","date":1589230261,"comment":"ЛЕГКОВОЙ ЗАКРЫТ!","changes":-240,"author":"Алексей","url":"","last_comment":"Машин не много, 10 минут простояли, поехали. Впереди 4 машины","last_comment_author":"Yuliya","last_comment_date":1578406001},"6":{"number":"0","date":1588339479,"comment":"","changes":-70,"author":"Евгений","url":"","last_comment":"Приезжающих на карантин не отправляют?","last_comment_author":"Евгений","last_comment_date":1584430806}}]

Теперь применим json_decode

$border_obj = json_decode($json_border,true);

Убедимся, что это массив.

echo $border_obj;

Array

И посмотрим содержимое. С помощью

var_dump($border_obj);

Массив содержит два вложенных массива - это мы видим из array(2) в самом начале.

Первый найти легко: [0]=> array(6)

Второй начинается в середине: [1]=> array(6)

array(2) { [0]=> array(6) { [1]=> array(10) { ["number"]=> string(1) "1" ["date"]=> int(1601955823) ["comment"]=> string(450) "Уважаемые, по недвижимости из России никого не выпускают. Фино возможно и пускают к себе, но на законодательном уровне России не закреплен выезд из РФ по недвижимости. Не теряйте зря своё время. Если есть вопросы, звоните в Пограничное управление." ["changes"]=> int(0) ["author"]=> string(8) "Макс" ["url"]=> string(0) "" ["last_comment"]=> string(98) "Николай, на всякий случай побыл в UK 3 дня. В Фин ренткар" ["last_comment_author"]=> string(12) "Максим" ["last_comment_date"]=> int(1602572751) ["waiting"]=> int(2) } [2]=> array(10) { ["number"]=> string(1) "1" ["date"]=> int(1601888757) ["comment"]=> string(207) "Что пишет Лина, это все теория из интернета. Откликнетесь те кто пытался проехать. У меня есть данные, что пускают." ["changes"]=> int(0) ["author"]=> string(10) "Игорь" ["url"]=> string(0) "" ["last_comment"]=> string(410) "путаница с рассказом про "3-е финское авто". Знающие правила врем.ввоза авто в Россию,поймет. И смахивает на сказку в которую дачники хотят верить.Был тут ранее один "ОЛЕГ" - нес пургу про езду через Вяртсиля. послали..." ["last_comment_author"]=> string(35) "Финский не у дачник" ["last_comment_date"]=> int(1603175331) ["waiting"]=> int(2) } [3]=> array(10) { ["number"]=> string(1) "0" ["date"]=> int(1596204849) ["comment"]=> string(126) "Куплю сыр из финки, килограммовый куски - Мильбона или из Призмы, за 700" ["changes"]=> int(-3) ["author"]=> string(10) "Антон" ["url"]=> string(0) "" ["last_comment"]=> string(131) "Люди!!! Выпускают из России или нет? У кого есть недвижимость в Финляндии" ["last_comment_author"]=> string(8) "Лиля" ["last_comment_date"]=> int(1602362641) ["waiting"]=> int(0) } [4]=> array(9) { ["number"]=> string(1) "1" ["date"]=> int(1598005875) ["comment"]=> string(202) "Валера граница откроют примерно март-апрель 2021 г. так мне сказал один подполковник пограничной службы Карелии" ["changes"]=> int(-3) ["author"]=> string(25) "Водитель фуры" ["url"]=> string(0) "" ["last_comment"]=> string(204) "Кто едет 30.07-01.07 в Финку через бруснике, можете передать документы, там 2 листочка конверт не запечатан. За оплату" ["last_comment_author"]=> string(8) "Юлия" ["last_comment_date"]=> int(1596033576) } [5]=> array(9) { ["number"]=> string(1) "1" ["date"]=> int(1601929549) ["comment"]=> string(257) "Тоже очень ждём инфо! Впускают только самих владельцев? Квартира оформлена на маму-пенсионерку, одна она не справится. Напишите, кто проехал!" ["changes"]=> int(1) ["author"]=> string(18) "Маргарита" ["url"]=> string(0) "" ["last_comment"]=> string(305) "Мои друзья звонили в русскую вет. службу Иматра. Русские выпускают со справкой и документами на недвижимость. Финам этого тоже достаточно. Хочу реальных подтвеждений." ["last_comment_author"]=> string(10) "Игорь" ["last_comment_date"]=> int(1601908944) } [6]=> array(9) { ["number"]=> string(1) "5" ["date"]=> int(1584465485) ["comment"]=> string(286) "❗Иностранные граждане находящиеся на территории Финляндии могут свободно покинуть её после 19.3. Граждане РФ могут это сделать на а/м (Иматра - на велосипеде)" ["changes"]=> int(0) ["author"]=> string(8) "Хорь" ["url"]=> string(0) "" ["last_comment"]=> string(153) "Павликбот заканчивай понос размазывать со своей вяртисяй. Границы закрыты дурашка." ["last_comment_author"]=> string(12) "Гопота" ["last_comment_date"]=> int(1584599269) } } [1]=> array(6) { [1]=> array(10) { ["number"]=> string(1) "3" ["date"]=> int(1596989427) ["comment"]=> string(289) "У нас гражд.Швеции и России. Русские номера. Измерили темп, мы заполнили бланк, что въехали. Вещей с собой не было почти. Спрашивали нас про декларируемый товар" ["changes"]=> int(0) ["author"]=> string(17) "Татьяна Л" ["url"]=> string(0) "" ["last_comment"]=> string(59) "Я тоже из Швеции номера шведские" ["last_comment_author"]=> string(8) "Лина" ["last_comment_date"]=> int(1596990521) ["waiting"]=> int(4) } [2]=> array(10) { ["number"]=> string(1) "0" ["date"]=> int(1596204981) ["comment"]=> string(130) "куплю самый дешевый сыр из Финки за 700-750 р ( Мильбона или из Призмы за 3,75" ["changes"]=> int(-7) ["author"]=> string(10) "Антон" ["url"]=> string(0) "" ["last_comment"]=> string(149) "Пропускают на легковых? Есть кто проезжал? Найдите время дать ответ. Очень нужно..." ["last_comment_author"]=> string(6) "оля" ["last_comment_date"]=> int(1586265072) ["waiting"]=> int(0) } [3]=> array(10) { ["number"]=> string(1) "0" ["date"]=> int(1602965682) ["comment"]=> string(141) "Никого! Понятно почему! Наши шерстят и взвешивают продукты) Но очень вежливы!)" ["changes"]=> int(-6) ["author"]=> string(12) "Максим" ["url"]=> string(44) "http://granitsa-online.com/Pages/Splash.aspx" ["last_comment"]=> string(126) "Лиза,позвоните на таможню,вы уже одно и тоже третий день спрашиваете." ["last_comment_author"]=> string(6) "Galina" ["last_comment_date"]=> int(1584714680) ["waiting"]=> int(0) } [4]=> array(9) { ["number"]=> string(1) "1" ["date"]=> int(1601842408) ["comment"]=> string(241) "Выезд в 11.30 в понедельник 05.10.2020.Возьму 2 попутчиков из Котки еду до Питера- могу до Выборга довезти. Пассажирам налегке. Ватсап 89219692239" ["changes"]=> int(-1) ["author"]=> string(8) "Лина" ["url"]=> string(0) "" ["last_comment"]=> string(14) "Реально" ["last_comment_author"]=> string(16) "Фантомас" ["last_comment_date"]=> int(1585069860) } [5]=> array(9) { ["number"]=> string(1) "0" ["date"]=> int(1589230261) ["comment"]=> string(30) "ЛЕГКОВОЙ ЗАКРЫТ!" ["changes"]=> int(-240) ["author"]=> string(14) "Алексей" ["url"]=> string(0) "" ["last_comment"]=> string(107) "Машин не много, 10 минут простояли, поехали. Впереди 4 машины" ["last_comment_author"]=> string(6) "Yuliya" ["last_comment_date"]=> int(1578406001) } [6]=> array(9) { ["number"]=> string(1) "0" ["date"]=> int(1588339479) ["comment"]=> string(0) "" ["changes"]=> int(-70) ["author"]=> string(14) "Евгений" ["url"]=> string(0) "" ["last_comment"]=> string(71) "Приезжающих на карантин не отправляют?" ["last_comment_author"]=> string(14) "Евгений" ["last_comment_date"]=> int(1584430806) } } }

Достанем количество машин, дату, комментарий, изменение количесва, автора, и время ожидания присланые пользователем на выезде из России через Торфяновку

echo $border_obj[0][1]["number"]; echo $border_obj[0][1]["date"]; echo $border_obj[0][1]["comment"]; echo $border_obj[0][1]["changes"]; echo $border_obj[0][1]["author"]; echo $border_obj[0][1]["waiting"];

1
1601955823
Уважаемые, по недвижимости из России никого не выпускают. Фино возможно и пускают к себе, но на законодательном уровне России не закреплен выезд из РФ по недвижимости. Не теряйте зря своё время. Если есть вопросы, звоните в Пограничное управление.
0
Макс
2

Комментарий пуст.

Дата дана в формате epoch time. Подробнее можете прочитать в моей статье Epoch Time

Теперь повторим, но для Светогорска и на въезд в Россиию

echo $border_obj[1][6]["number"]; echo $border_obj[1][6]["date"]; echo $border_obj[1][6]["comment"]; echo $border_obj[1][6]["changes"]; echo $border_obj[1][6]["author"]; echo $border_obj[1][6]["waiting"];

0
1588339479

-70
Евгений

Статьи о PHP
Программирование на PHP
Как отобразить время различных часовых поясов PHP
Как вставить переменную в ссылку PHP
Как получить ширину экрана с помощью PHP
Premature end of chunk coded message body: closing chunk expected

Если остались вопросы - смело задавайте их в комментариях.

Поиск по сайту
Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: