Вы когда-нибудь задумывались, почему одни API отдают данные в формате JSON, а другие — в XML? И как в PHP удобнее всего с ними работать? Если да, то эта статья для вас. Мы разберём оба формата, научимся их парсить, создавать и избегать типичных ошибок. А ещё сравним их и дадим практические советы.
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_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, чтобы избежать проблем с русскими буквами. - Безопасность: никогда не доверяйте данным из внешних источников. Проверяйте типы и экранируйте вывод.
json_decode(json_encode(simplexml_load_string($xml)), true). Это быстро, но работает не для всех случаев (например, с атрибутами).
Что в итоге?
JSON и XML — два разных инструмента. JSON проще и быстрее, XML — мощнее и формальнее. В PHP оба формата поддерживаются «из коробки». Главное — не забывайте обрабатывать ошибки и следить за кодировкой. Надеюсь, эта статья помогла вам разобраться. Удачи в кодинге!



