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

В 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 читайте тут.
Полезная статья?
(Нет голосов)
Вам также могут понравиться
Английский для программистов

Английский для программистов

Почему IT-специалисту необходимо освоить английский язык? Разбираем в статье.

Как подключить CSS и JS файлы к шаблону 1С Битрикс

Как подключить CSS и JS файлы к шаблону 1С Битрикс

Как правильно подключать стили и скрипты к шаблону 1С Битрикс.

Генерация оглавления статьи

Генерация оглавления статьи

В статье рассмотрен пример функции для генерации оглавления статьи блога или новости


Комментарии
Защита от автоматических сообщений
CAPTCHA
Введите слово на картинке