Вы когда-нибудь задумывались, почему одни API отдают данные в формате JSON, а другие — в XML? И как в PHP удобнее всего с ними работать? Если да, то эта статья для вас. Мы разберём оба формата, научимся их парсить, создавать и избегать типичных ошибок. А ещё сравним их и дадим практические советы.

Digital-студия WNDER

JSON в PHP: быстро, просто, удобно

JSON (JavaScript Object Notation) — это текстовый формат обмена данными, основанный на JavaScript. В PHP для работы с ним есть две основные функции: json_encode() и json_decode(). Первая превращает PHP-переменные в JSON-строку, вторая — наоборот.

Пример: у нас есть массив с данными пользователя. Закодируем его в JSON:

$user = [
    'name' => 'Иван',
    'age' => 30,
    'email' => 'ivan@example.com'
];
$json = json_encode($user, JSON_UNESCAPED_UNICODE);
echo $json; // {"name":"Иван","age":30,"email":"ivan@example.com"}

Обратите внимание на флаг JSON_UNESCAPED_UNICODE — он позволяет сохранить кириллицу в читаемом виде, а не в виде \uXXXX. Без него русские буквы будут закодированы в Unicode-последовательности.

Теперь раскодируем обратно:

$jsonString = '{"name":"Иван","age":30,"email":"ivan@example.com"}';
$userArray = json_decode($jsonString, true); // true — вернуть ассоциативный массив
print_r($userArray);

Если второй аргумент не указать или поставить false, то json_decode() вернёт объект stdClass. Обычно удобнее работать с массивом, поэтому true — хорошая практика.

Обработка ошибок JSON

JSON-парсинг может пойти не так: например, если строка битая или содержит синтаксическую ошибку. Функция json_decode() в случае ошибки вернёт null, но это не всегда очевидно. Чтобы точно знать, что произошло, используйте json_last_error() и json_last_error_msg().

$badJson = '{"name":"Иван","age":30,}'; // лишняя запятая
$data = json_decode($badJson, true);
if (json_last_error() !== JSON_ERROR_NONE) {
    echo 'Ошибка JSON: ' . json_last_error_msg();
}

Совет: всегда проверяйте ошибки после декодирования. Это сэкономит часы отладки.

Правило: При работе с JSON в PHP всегда используйте флаги JSON_UNESCAPED_UNICODE и JSON_UNESCAPED_SLASHES для читаемости, а после json_decode() проверяйте json_last_error().

XML в PHP: мощно, но многословно

XML (eXtensible Markup Language) — это более старый и формальный формат. В PHP есть несколько способов работы с ним: SimpleXML, DOM, XMLReader. Для большинства задач хватает SimpleXML — он простой и интуитивный.

Пример чтения XML:

$xmlString = <<
    
        Иван
        30
        ivan@example.com
    
    
        Мария
        25
        maria@example.com
    

XML;

$xml = simplexml_load_string($xmlString);
foreach ($xml->user as $user) {
    echo "Имя: {$user->name}, Возраст: {$user->age}, Email: {$user->email}\n";
}

SimpleXML превращает XML в объект, с которым можно работать как с обычными свойствами. Например, $xml->user[0]->name вернёт имя первого пользователя.

Создание XML тоже простое:

$xml = new SimpleXMLElement('');
$user = $xml->addChild('user');
$user->addChild('name', 'Иван');
$user->addChild('age', 30);
$user->addChild('email', 'ivan@example.com');
echo $xml->asXML();

Обратите внимание: SimpleXML не позволяет легко добавлять атрибуты или работать с пространствами имён. Для сложных случаев используйте DOM.

Сравнение JSON и XML: что выбрать?

Оба формата имеют свои сильные и слабые стороны. Вот краткая таблица для сравнения:

Критерий JSON XML
Читаемость Высокая Средняя (много тегов)
Размер данных Компактный Более объёмный
Поддержка в PHP Встроенные функции SimpleXML, DOM, XMLReader
Сложные структуры Ограниченно (нет атрибутов) Гибко (атрибуты, пространства имён)

JSON выбирают за скорость и простоту, XML — за строгость и расширяемость. В современной веб-разработке JSON используется чаще, особенно в REST API. XML всё ещё жив в SOAP, RSS, SVG и некоторых корпоративных системах.

Практические советы и лайфхаки

  • Валидация JSON: перед декодированием можно проверить строку на валидность с помощью json_decode() и json_last_error().
  • Работа с большими XML: если файл огромный, используйте XMLReader для потокового чтения, чтобы не загружать всё в память.
  • Кодировка: всегда указывайте UTF-8 при работе с JSON и XML, чтобы избежать проблем с русскими буквами.
  • Безопасность: никогда не доверяйте данным из внешних источников. Проверяйте типы и экранируйте вывод.
Лайфхак: Для преобразования XML в массив используйте функцию json_decode(json_encode(simplexml_load_string($xml)), true). Это быстро, но работает не для всех случаев (например, с атрибутами).

Что в итоге?

JSON и XML — два разных инструмента. JSON проще и быстрее, XML — мощнее и формальнее. В PHP оба формата поддерживаются «из коробки». Главное — не забывайте обрабатывать ошибки и следить за кодировкой. Надеюсь, эта статья помогла вам разобраться. Удачи в кодинге!

Студия WNDER