Если вы пишете на PHP, рано или поздно придётся обмениваться данными с другими сервисами. И тут на сцену выходят два формата: JSON и XML. В этой статье я расскажу, как с ними работать в PHP, какие функции использовать и когда что выбирать. Без заумных терминов, с примерами и лайфхаками.
JSON: легко, быстро, современно
JSON (JavaScript Object Notation) — это текстовый формат обмена данными. Выглядит как набор пар «ключ: значение», очень похож на массивы в PHP. Его любят за простоту и читаемость. В PHP для работы с JSON есть две основные функции: json_encode() и json_decode().
Пример: у нас есть массив с данными пользователя. Превратим его в JSON-строку:
$user = [
'name' => 'Иван',
'age' => 30,
'email' => 'ivan@example.com'
];
$json = json_encode($user);
echo $json;
// {"name":"Иван","age":30,"email":"ivan@example.com"}
А теперь обратная задача: получить из JSON-строки массив или объект. По умолчанию json_decode() возвращает объект, но можно передать второй аргумент true, чтобы получить ассоциативный массив:
$jsonString = '{"name":"Иван","age":30,"email":"ivan@example.com"}';
$data = json_decode($jsonString, true);
print_r($data);
// Array ( [name] => Иван [age] => 30 [email] => ivan@example.com )
Всё просто, правда? Но есть нюансы. Например, если JSON-строка битая, json_decode() вернёт null. Всегда проверяйте ошибки с помощью json_last_error().
XML: мощно, но многословно
XML (eXtensible Markup Language) — это язык разметки, где данные обёрнуты в теги. Он строже JSON и поддерживает атрибуты, пространства имён, схемы. В PHP для работы с XML есть несколько расширений: SimpleXML, DOM, XMLReader. Начнём с SimpleXML — самого простого.
Допустим, есть XML-строка:
$xmlString = '<?xml version="1.0"?>
<user>
<name>Иван</name>
<age>30</age>
<email>ivan@example.com</email>
</user>';
$xml = simplexml_load_string($xmlString);
echo $xml->name; // Иван
echo $xml->age; // 30
SimpleXML превращает XML в объект, с которым можно работать как с обычными свойствами. Но если XML сложный (с атрибутами, вложенными пространствами имён), лучше использовать DOMDocument. Он даёт полный контроль над структурой.
Пример с DOMDocument:
$dom = new DOMDocument();
$dom->loadXML($xmlString);
$name = $dom->getElementsByTagName('name')->item(0)->nodeValue;
echo $name; // Иван
Для генерации XML можно использовать SimpleXMLElement или DOMDocument. Вот как создать простой XML с помощью SimpleXML:
$xml = new SimpleXMLElement('<user></user>');
$xml->addChild('name', 'Иван');
$xml->addChild('age', 30);
$xml->addChild('email', 'ivan@example.com');
echo $xml->asXML();
Сравнение JSON и XML: таблица
Чтобы легче было выбрать формат, вот сравнительная таблица:
| Критерий | JSON | XML |
|---|---|---|
| Читаемость | Высокая | Средняя (много тегов) |
| Размер данных | Компактный | Более объёмный |
| Поддержка в PHP | Встроенные функции | Несколько расширений |
| Сложные структуры | Ограниченно | Гибко (атрибуты, пространства имён) |
| Скорость обработки | Выше | Ниже |
Правила и лайфхаки
- Для JSON используйте флаг JSON_UNESCAPED_UNICODE, чтобы кириллица не превращалась в \uXXXX.
- При работе с XML отключайте загрузку внешних сущностей (libxml_disable_entity_loader), чтобы избежать XXE-атак.
- Если нужно преобразовать XML в массив, используйте json_decode(json_encode(simplexml_load_string($xml)), true) — быстрый хак.
- Для больших XML-файлов используйте XMLReader — он читает потоково и экономит память.
Что в итоге?
JSON проще и быстрее, идеален для REST API и обмена данными между современными сервисами. XML мощнее и гибче, но требует больше кода и ресурсов. В PHP оба формата поддерживаются «из коробки», так что выбор зависит от задачи. Если вам нужно быстро и просто — берите JSON. Если важна строгая структура и расширяемость — XML.
И помните: всегда проверяйте ошибки и не доверяйте входным данным. Удачи в кодинге!



