Любой вебмастер часто сталкивается с необходимостью прочитать, преобразовать и использовать данные из JSON-источника
JSON (JavaScript Object Notation) – это компактный формат обмена данными, который широко используется для передачи и хранения структурированных данных в веб-приложениях. Принято считать, что JSON базируется на JavaScript, однако данный формат не имеет прямой связи с Джавой и легко используется практически в любом языке программирования.
Нас в первую очередь интересует PHP. В нем есть несколько способов расшифровки JSON-строки и преобразования ее в массив или объект. Их мы и рассмотрим в нашей статье. Но прежде выясним,
Применений формату для работы со структурированными данными может быть великое множество. Для их перечисления формат нашего блога совершенно не подходит. Мы скорее говорим о некоторых утилитарных задачах, которые можно назвать типовыми для ваших проектов (или их категории).
Формат JSON используется для взаимодействия с различными популярными сервисами. В их числе, например, Яндекс Карты, Яндекс Директ и Яндекс Метрика. Многие государственные и коммерческие банки делятся информацией о курсах валют именно в формате JSON.
Приведем простой пример:
$json_string = {"name": "Mike", "age": 40, "city": "Minsk"};
Как видим, наш объект представляет собой неупорядоченное множество пар “ключ”: “значение”, заключенное в фигурные скобки.
С терминологией все одновременно и просто и сложно: ключ иногда называют свойством или названием. По аналогии с массивом “ключ” будет звучать более привычно. Что касается значения, то с ним все вполне определенно. Кстати, в его качестве может выступать:
Возможность использовать другой JSON-объект в качестве значения говорит о том, что допускаются уровни вложенности, и их может быть любое количество.
При оформлении значений помните, что только строки необходимо заключать в кавычки. Для остальных типов значений они не нужны.
Кстати, пары “ключ: значение” можно указывать в любом порядке. В очень редких случаях порядок имеет значение, но это скорее исключение из правила.
В самом простом варианте чтение внешних JSON-данных можно реализовать с помощью стандартной PHP-функции file_get_content()
:
$data = file_get_content("data.json"); var_dump($data);
Как видим, в нашу переменную $data
попали JSON-данные “как есть”, т. е. в строковом виде. Не очень удобно. Нас больше устроит массив или объект.
Функция json_decode()
является стандартной функцией PHP для расшифровки JSON-строки. Она принимает JSON-строку в качестве аргумента и возвращает массив или объект, в зависимости от значения второго аргумента (true или (по умолчанию) false соответственно).
// Расшифруем JSON-строки в объект или массив $data_object = json_decode($json_string); // объект $data_array = json_decode($json_string, true); // массив
Оставим объекты профессионалам и рассмотрим массив, который мы получили:
print_r($data_array);
Обычный ассоциативный массив, с которым легко и просто работать и использовать для решения наших задач:
// Вывод элемента массива по имени: echo $data_array["name"]; // получим Mike
При работе с внешними данными случается всякое, и очень желательно будет учесть это при обработке и выводе данных.
// Формируем JSON-объект $json_string = {"name": "Mike", "age": 40, "city": "Minsk"}; // Расшифровываем его в массив $data_array = json_decode($json_string, true); // Проверяем успешность расшифровки if (json_last_error() !== JSON_ERROR_NONE) { echo 'При расшифровке JSON данных произошла ошибка: ' . json_last_error_msg(); } else { // Выводим расшифрованные данные print_r($data_array); }
Таким образом, при неправильно сформированном локальном или недоступном внешнем JSON-объекте ошибка будет обработана без фатальных последствий для вашего сайта.
Мы разобрались с тем, как выглядит JSON-объект и научились выполнять простейшие операции с ним – получение, расшифровку с преобразованием в массив или объект, а также обработку ошибок. Наши примеры довольно схематичны, и я надеюсь, что начальные понятия о том, как работать с JSON-данными вы смогли получить.
В заключение скажем, что кроме стандартной функции json_decode()
расшифровку объекта можно выполнить с помощью стандартного PHP-интерфейса JsonSerializable
, а также сторонних библиотек, которые предоставят дополнительные возможности для сериализации и десериализации JSON-данных, а также обеспечат более высокую производительность и безопасность.
© 2008 - 2025 Webmasters.BY Все права защищены
Новый комментарий