Оглавление
{ключ: значение}
. Значение при этом может быть массивом, числом, строкой и булевым значением, что позволяет передавать сложные структурные данные в виде текста, быстро и удобно. Поддерживается большинством языков программирования.В PHP поддержка формата JSON появилась с версии 5.2.0 и работает только с кодировкой UTF-8.
Преобразование массива в JSON
Самый распространёнными данными передаваемыми в виде JSON в php являются массивы. Для преобразования массива в JSON используется функция json_encode(). Принимает 3 аргумента, сам массив и специальный флаг (битовая маска) влияющий на то, как функция будет обрабатывать данные внутри массива, а так же целое число устанавливающее максимальную глубину, по умолчанию 512 ( за 10 лет практики ни разу не приходилось пользоваться этим аргументом).
//Данные пользователя
$user = [
'name' => 'Макс',
'age' => 25,
'contacts' => [
'email' => 'example@mail.com',
'phone' => '+71112225566'
]
];
$json = json_encode($user, JSON_UNESCAPED_UNICODE);
echo $json;
Результат:
{"name":"Макс","age":25,"contacts":{"email":"example@mail.com","phone":"+71112225566"}}
В данном примере я использовал флаг JSON_UNESCAPED_UNICODE
он нужен для того, чтобы кириллица передавалась в человекочитаемом виде, а не кодировалась.Декодирование JSON строки
Функцияjson_encode()
преобразует строку в PHP-объект. Допустим в наш скрипт пришла JSON строка с формы записи на приём:
{"name":"Николай","age":35,"contacts":{"email":"example@mail.com","phone":"+75558885566"},"msg":"Добрый день!
\nЯ бы хотел записаться на приём к стоматологу","time":"14.01.2023 15:09:08","doctor":"Иванова А.М. - врач стоматолог"}
Чтобы преобразовать её в php ассоциативный массив (наиболее удобный формат для работы с такими данными) нужно вызвать json_encode()
передав первым аргументом строку, вторым булеву true
.
$json = '{"name":"Николай","age":35,"contacts":{"email":"example@mail.com","phone":"+75558885566"},"msg":"Добрый день! Я бы хотел записаться
на приём к стоматологу","time":"14.01.2023 15:25:01","doctor":"Иванова А.М. - врач стоматолог"}';
$data = json_decode($json, true);
echo '<pre>';
print_r($data);
echo '</pre>';
Результат:
Array
(
[name] => Николай
[age] => 35
[contacts] => Array
(
[email] => example@mail.com
[phone] => +75558885566
)
[msg] => Добрый день! Я бы хотел записаться на приём к стоматологу
[time] => 14.01.2023 15:25:01
[doctor] => Иванова А.М. - врач стоматолог
)
HTTP запрос в формате JSON
Большинство сервисов предоставляющих API для работы с данными, требуют чтобы запросы к ним осуществлялись в формате JSON. Сделать такой запрос можно при помощи cURL PHP передав в качестве заголовковCURLOPT_HTTPHEADER
массив с 'Content-Type: application/json'
.
//Подготовка даных
$data = [
'user' => 'test@yandex.ru'
'method' => 'getData',
];
//Инициализируем cURL сеанс
$ch = curl_init('https://metrika.yandex.ru');
//Устанавливаем заголовки
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POST, 1);
//Передаём данные методом POST в формате JSON
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
//Передача
$res = curl_exec($ch);
//Закрываем сеанс
curl_close($ch);
Подробнее о работе с cURL PHP читайте тут.