Веб-программирование

Используем PHP для чтения данных в формате JSON

Любой вебмастер часто сталкивается с необходимостью прочитать, преобразовать и использовать данные из JSON-источника

Используем PHP для чтения данных в формате JSON

JSON (JavaScript Object Notation) – это компактный формат обмена данными, который широко используется для передачи и хранения структурированных данных в веб-приложениях. Принято считать, что JSON базируется на JavaScript, однако данный формат не имеет прямой связи с Джавой и легко используется практически в любом языке программирования.

Нас в первую очередь интересует PHP. В нем есть несколько способов расшифровки JSON-строки и преобразования ее в массив или объект. Их мы и рассмотрим в нашей статье. Но прежде выясним, 

Зачем нужен JSON

Применений формату для работы со структурированными данными может быть великое множество. Для их перечисления формат нашего блога совершенно не подходит. Мы скорее говорим о некоторых утилитарных задачах, которые можно назвать типовыми для ваших проектов (или их категории).

Формат JSON используется для взаимодействия с различными популярными сервисами. В их числе, например, Яндекс Карты, Яндекс Директ и Яндекс Метрика. Многие государственные и коммерческие банки делятся информацией о курсах валют именно в формате JSON. 

Как устроен JSON-объект

Приведем простой пример:

$json_string = {"name": "Mike", "age": 40, "city": "Minsk"};

Как видим, наш объект представляет собой неупорядоченное множество пар “ключ”: “значение”, заключенное в фигурные скобки. 

С терминологией все одновременно и просто и сложно: ключ иногда называют свойством или названием. По аналогии с массивом “ключ” будет звучать более привычно. Что касается значения, то с ним все вполне определенно. Кстати, в его качестве может выступать:

  • строка,
  • число,
  • массив,
  • литерал (true, false, null),
  • JSON-объект.

Возможность использовать другой JSON-объект в качестве значения говорит о том, что допускаются уровни вложенности, и их может быть любое количество.

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

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

Функция file_get_content()

В самом простом варианте чтение внешних JSON-данных можно реализовать с помощью стандартной PHP-функции file_get_content():

$data = file_get_content("data.json");
var_dump($data);

Как видим, в нашу переменную $data попали JSON-данные “как есть”, т. е. в строковом виде. Не очень удобно. Нас больше устроит массив или объект.

Функция json_decode()

Функция 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-данных, а также обеспечат более высокую производительность и безопасность.

Комментарии 0

Новый комментарий

Имя:
Для редактирования комментария осталось 10 минут
Комментарии отсутствуют