Ответ SOAP-сервиса для фронтенда
Старый сервис отвечает XML, а фронтенду нужен JSON. Атрибут id станет ключом "@id", а элемент Total с атрибутом currency — объектом, где сумма лежит в "#text". Префиксы soap: остаются в именах ключей, как написаны.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Order id="1057">
<Status>paid</Status>
<Total currency="RUB">1490.00</Total>
</Order>
</soap:Body>
</soap:Envelope>
Каталог из 1С с одним и несколькими товарами
В этой выгрузке товар один, но в других их будет много. Включите «Всегда массивы», и "Товар" станет массивом даже из одного элемента — код, который его читает, не придётся писать для двух случаев. Артикул 00-00012345 останется строкой с нулями.
<КоммерческаяИнформация ВерсияСхемы="2.10">
<Каталог>
<Товары>
<Товар>
<Ид>4f1c-0017</Ид>
<Артикул>00-00012345</Артикул>
<Наименование>Кабель ВВГнг 3х2,5</Наименование>
</Товар>
</Товары>
</Каталог>
</КоммерческаяИнформация>
У XML есть то, чего нет в JSON: атрибуты, текст рядом с вложенными элементами, повторяющиеся теги. Единого стандарта перевода нет, поэтому правила здесь простые и одинаковые во всём документе.
Элемент становится ключом с его именем. Атрибут — ключом "@имя". Элемент только с текстом — строкой, а если у него есть атрибуты или вложенные элементы, текст попадает в "#text". Пустой элемент без атрибутов — пустая строка "".
Если элемент хоть где-то в документе повторяется под тем же родителем, он становится массивом везде на этом пути — даже там, где встретился один раз. Так у всех записей одинаковая структура. Переключатель «Всегда массивы» делает массивом каждый элемент.
Все значения — строки: ИНН 0123456789, артикул 007 и сумма 1490.00 не превратятся в числа и не потеряют нули. Комментарии, инструкции обработки и объявление <?xml … ?> в JSON не переносятся, CDATA становится обычным текстом.
Переключите направление на JSON → XML. Действуют те же правила наоборот: ключ "@имя" — атрибут, "#text" — текст элемента, массив — повтор элемента с одним именем. Числа, true и false записываются текстом, null — пустым элементом. Результат начинается с объявления <?xml version="1.0" encoding="UTF-8"?>.
У XML один корневой элемент, поэтому у JSON на верхнем уровне должен быть один ключ. Если их несколько, мы предложим обернуть данные кнопкой «Обернуть в root». Ключ, который не может быть именем тега, например "1" или "a b", будет ошибкой с понятным текстом.
В Python те же соглашения у библиотеки xmltodict: @ для атрибутов и #text для текста. Отличие в массивах — xmltodict решает отдельно для каждого места, поэтому один и тот же элемент бывает то объектом, то списком; параметр force_list это исправляет. В JavaScript популярна fast-xml-parser: по умолчанию она пропускает атрибуты вовсе (ignoreAttributes: true), а включённые пишет с префиксом @_; кроме того, значения, похожие на числа, она по умолчанию превращает в числа (parseTagValue).
В 1С готовой функции «XML в JSON» нет: документ читают через ЧтениеXML или ФабрикаXDTO и записывают через ЗаписьJSON, а как атрибуты и повторы ляжут в JSON, решает тот, кто пишет код. Чтобы проверить, какой JSON должен получиться, вставьте XML сюда и сравните.
Почему числа в JSON в кавычках
В XML всё — текст, и по самому значению не понять, число это или код. ИНН 0123456789 как число потерял бы ноль, а сумма 1490.00 стала бы 1490. Поэтому все значения переносятся строками без изменений.
Почему элементы оказались не в том порядке
Элементы с одним именем собираются в один массив, даже если между ними стояли другие. JSON-объект не умеет хранить ключи вперемешку, и мы предупредим, если порядок изменился.
Что происходит с пространствами имён
Префиксы остаются в именах ключей, как написаны: "soap:Envelope". Объявления xmlns становятся обычными атрибутами "@xmlns:soap", поэтому при обратном переводе в XML пространства имён восстановятся.
Сохранятся ли комментарии
Нет: в JSON комментариев нет. Под результатом будет подпись, что комментарии и объявление XML не перенесены.
Можно ли получить XML обратно из этого JSON
Да, правила работают в обе стороны: @ — атрибуты, #text — текст, массивы — повторы. Данные вернутся теми же, а комментарии и исходные отступы — нет.
Куда уходят мои данные
Никуда. Конвертация работает в браузере, запросы на чужие адреса запрещены заголовком безопасности. Ответы сервисов и выгрузки 1С остаются на вашем компьютере.