Язык, на котором говорят API
API обмениваются данными в виде JSON — текста вида {"id": 1, "name": "Ana"}. PHP переводит в обе стороны двумя встроенными функциями: json_encode превращает значение в текст JSON, json_decode превращает текст JSON обратно в данные PHP.
Ассоциативные массивы — естественный носитель: ключи массива становятся ключами JSON, точно как написаны. Передача true вторым аргументом json_decode просит вернуть массивы (а не объекты) — примеры здесь всегда так и делают.
От массива к JSON
json_encode выдаёт компактный JSON для машин; флаг JSON_PRETTY_PRINT выдаёт читаемый JSON для людей и журналов. Выбрасывать ли пустые поля — решать вам: отфильтруйте их из массива до кодирования.
Кодирование: компактное и читаемое
У Ana нет адреса email, и фильтр полностью убирает пустое поле из её JSON. Полная запись Ben печатается с отступами.
Вывод: PHP-скрипт
<?php
function toJson(array $user): string {
// Пустые поля вообще не попадают в JSON.
return json_encode(array_filter($user, fn($value) => $value !== ""));
}
$ana = ["id" => 1, "name" => "Ana", "email" => ""];
echo toJson($ana) . "\n";
$ben = ["id" => 2, "name" => "Ben", "email" => "[email protected]"];
echo json_encode($ben, JSON_PRETTY_PRINT) . "\n";
От JSON к данным
json_decode разбирает JSON в массивы. Неизвестные ключи JSON не отбрасываются — они едут дальше как лишние элементы, которые ваш код вправе игнорировать; отсутствующие ключи просто отсутствуют, поэтому читайте их через ?? со значением по умолчанию. Некорректный JSON возвращает null, а json_last_error_msg() сообщает причину — всегда проверяйте, прежде чем доверять результату.
Декодирование и лишний ключ
JSON несёт ключ extra, которого код не запрашивал, — ошибки нет, он просто появляется в разобранном массиве, как показывает список ключей. Испорченный же JSON возвращает null с настоящим сообщением об ошибке.
Вывод: PHP-скрипт
<?php
$data = '{"id": 7, "name": "Cleo", "extra": "ignored"}';
$user = json_decode($data, true);
echo "id: {$user['id']}, name: {$user['name']}\n";
echo "ключи: " . implode(", ", array_keys($user)) . "\n";
$broken = json_decode('{"id": ', true);
if ($broken === null) {
echo "ошибка: " . json_last_error_msg() . "\n";
}
Вложенные данные
Реальные данные API вложенные: заказ несёт своего пользователя и список товаров. Массивы внутри массивов отображаются в JSON автоматически — массив с ключами становится объектом JSON, список становится массивом JSON — никакой особой обработки не нужно.
Заказ с пользователем внутри
Вложенный массив user становится вложенным объектом JSON, список items становится массивом JSON — форма данных PHP и есть форма JSON.
Вывод: PHP-скрипт
<?php
$order = [
"id" => 1042,
"items" => ["keyboard", "mouse"],
"user" => ["id" => 1, "name" => "Ana"],
];
echo json_encode($order, JSON_PRETTY_PRINT) . "\n";