Получение данных json php

Предполагается, что это общий справочный вопрос и ответ, охватывающий многие бесконечные вопросы. «Как мне получить доступ к данным в моем JSON?» вопросы. Это здесь, чтобы справиться с широкими основами декодирования JSON в PHP и доступа к результатам.

У меня есть JSON:

Как мне декодировать это в PHP и получить доступ к полученным данным?

Решение

вступление

Во-первых, у вас есть строка. JSON не является массивом, объектом или структурой данных. JSON текстовый формат сериализации — это необычная строка, но все же просто строка. Расшифруйте его в PHP с помощью json_decode() .

Там вы можете найти:

  • скаляры: строки , Интс , поплавки , а также Bools
  • обнуляет (особый тип своего собственного)
  • составные типы: объекты а также массивы .

Это те вещи, которые могут быть закодированы в JSON. Точнее, это версии PHP вещей, которые можно кодировать в JSON.

В них нет ничего особенного. Они не являются «объектами JSON» или «массивами JSON». Вы расшифровали JSON — теперь у вас есть основные повседневные типы PHP .

Объекты будут экземплярами Std > , встроенный класс, который просто универсальная вещь это не важно здесь.

Доступ к свойствам объекта

Вы получаете доступ к свойства одного из этих объектов так же, как и для открытых нестатических свойств любого другого объекта, например, $object->property ,

Читайте также  Рисунки карандашом для срисовки очень красивые девушки

Доступ к элементам массива

Вы получаете доступ к элементам одного из этих массивов так же, как и для любого другого массива, например, $array[0] .

Переберите его с foreach .

глазированный
Шоколад с окропляет
кленовый

Доступ к вложенным элементам

Свойства объектов и элементов массивов могут быть больше объектов и / или массивов — вы можете просто продолжать получать доступ к их свойствам и элементам, как обычно, например, $object->array[0]->etc ,

Переходя true в качестве второго аргумента json_decode ()

Когда вы сделаете это, вместо объектов вы получите ассоциативные массивы — массивы со строками для ключей. Снова вы получаете доступ к его элементам, как обычно, например, $array[‘key’] ,

Не знаю, как структурированы данные

Прочитайте документацию о том, что вы получаете JSON.

Посмотрите на JSON — где вы видите фигурные скобки <> ожидать объект, где вы видите квадратные скобки [] ожидать массив.

Хит декодированные данные с print_r() :

и проверьте вывод:

Он скажет вам, где у вас есть объекты, где у вас есть массивы, а также имена и значения их членов.

Если вы можете зайти так далеко, прежде чем заблудитесь — зайдите так далеко и нажмите тот с print_r() :

Разбейте проблему на части, которые легче обернуть вокруг.

json_decode() возвращается null

Это происходит потому, что либо:

  1. JSON состоит исключительно из этого, null ,
  2. JSON недействителен — проверьте результат json_last_error_msg или поставить что-то вроде JSONLint .
  3. Он содержит элементы, вложенные более 512 уровней. Эту максимальную глубину по умолчанию можно изменить, передав целое число в качестве третьего аргумента json_decode() .

Если вам нужно изменить максимальную глубину, вы, вероятно, решаете не ту проблему. Узнайте, почему вы получаете такие глубоко вложенные данные (например, запрашиваемая служба, которая генерирует JSON, имеет ошибку) и убедитесь, что этого не происходит.

Читайте также  Почему компьютер не видит модем мтс коннект

Имя свойства объекта содержит специальный символ

Иногда у вас будет имя свойства объекта, которое содержит что-то вроде дефиса — или в знак @ который не может быть использован в литеральном идентификаторе. Вместо этого вы можете использовать строковый литерал в фигурных скобках для адресации.

Кто-то положил JSON в ваш JSON

Это смешно, но это случается — в вашем JSON есть кодировка в виде строки. Расшифруйте, получите доступ к строке как обычно, расшифруйте тот, и в конце концов получите то, что вам нужно.

Данные не помещаются в памяти

Если ваш JSON слишком велик для json_decode() чтобы справиться сразу все становится сложнее. Увидеть:

Как это отсортировать

Другие решения

Ты можешь использовать json_decode () преобразовать строку json в объект / массив PHP.

Входные данные:

Выход:

Несколько моментов для запоминания:

  • json_decode требует, чтобы строка была действительной json иначе он вернется NULL ,
  • В случае невозможности декодирования, json_last_error() может быть использован для определения точного характера ошибки.
  • Убедитесь, что вы проходите utf8 содержание или json_decode может выдать ошибку и просто вернуть NULL значение.

Я написал пакет с именем JSON (GitHub , Packagist ). Если вы хотите предотвратить накладные расходы на использование json_* функции, вы должны попробовать это.

пример

Увидеть вики , или же краткое руководство познакомиться с этим.

Кроме того, если вы хотите прочитать файлы JSON и извлечь их данные (как вам кажется, вы пытаетесь это сделать), см. JSONFile пакет, о котором я тоже написал.

API яндекса говорит о том, что по некому урл, который Я укажу уйдет пост в json, на который Я должен дать ответ

Если Я просто в файле для проверки делаю так:

Читайте также  Сборка драйверов для ноутбуков

То вся игра идет хорошо. Если пытаюсь получить json через POST вот так: $responseJson = $_POST[‘cart’]; , то ничего не выходит. Пусто. Я не верно получаю json данные?

1 ответ 1

ПХП по умолчанию не парсит запросы кроме application/x-www-form-urlencoded multipart/form-data . Т.е. тельце надо парсить самому.

Можно проверить что бы $_SERVER["CONTENT_TYPE"] == ‘application/json’ до и что значение json_decode не NULL после.

А тело парсится так:

Кстати ещё как дополнение: ПХП не парсит PUT/DELETE. запросы.

Дата публикации: 2017-04-25

От автора: когда я работал в Mozilla, мне нужно было написать транзакцию аутентификации типа OAuth между Bugzilla и Phabricator. Эта задача вынудила меня вернуться в мир PHP, к языку, который я давно не использую (с версии

5.2). С помощью PHP я только создаю темы и плагины на WP для своего блога. Возврат к языку, который не практиковался годами, кажется чем-то совершенно новым. Начинаешь замечать шаблоны и методы, о которых и не догадывался раньше.

Где-то в транзакции аутентификации Phabricator должен был получать POST-запрос с JSON. Я думал, что данные окажутся в глобальном массиве $_POST, однако переменная была пуста. И как же мне получить POST-данные? Получить POST JSON в PHP можно с помощью следующих строк:

Ссылка на основную публикацию
Adblock
detector