Command Palette

Search for a command to run...

JSON в XML-конвертер: как правильно сопоставить ключи, атрибуты и массивы

JSON в XML-конвертер: как правильно сопоставить ключи, атрибуты и массивы

T
Toolz Team
|Jul 20, 2026|16 Мин. читать

Часть коллекции Инструменты для данных

json в xml

Мгновенно конвертируйте JSON в хорошо сформированный XML. Сопоставьте ключи объектов с элементами, @-префиксные ключи к атрибутам и #текст с содержимым, разворачивайте массивы в повторяющиеся теги и экспортируйте миниатюрный или довольно напечатанный XML. 100% клиентская.

Открыть инструмент «json в xml»

Две модели не совпадают: RFC 8259 определяет шесть типов JSON без атрибутов, при этом XML 1.0 имеет атрибуты, пространства имен и упорядоченное смешанное содержимое. идти в этом направлении означает выбрать, что делать с разницей.

В первый раз, когда мне пришлось отправить данные JSON в систему, которая говорила только на XML, я сделал наивную вещь: я вручную написал угловые скобки в текстовом редакторе Это был канал поставщика, который ожидал конверт в стиле SOAP, и моим источником был аккуратный массив JSON, выходящий из API Laravel. Через двадцать минут я неправильно сопоставил закрывающий тег где-то около сороковой записи, и получающий парсер бросил "junk после элемента документа & quot; ошибка, которая ничего не говорила мне о где. В тот вечер я преподал мне урок, который я применил по каждой интеграции, поскольку: преобразование между JSON и XML - это не творческий акт. Это проблема сопоставления с небольшим количеством правил, и в тот момент, когда вы записываете эти правила, все это становится механическим.

Это руководство является версией того сопоставления, которое я хотел бы I'd имел. Я создаю [Toolz.dev](/, и один из инструментов там основан на браузере Конвертер JSON в XML это в точности применимо к соглашениям ниже. Но суть этой статьи не в кнопке - it's понимание почему ключ становится элементом, почему @-префиксный ключ становится атрибутом, и почему массив превращается в повторяющиеся теги, а не в пронумерованный список. Как только эти три идеи щелкнут, вы можете преобразовать любой JSON в XML вручную, если это необходимо, и вы можете отладить выходные данные, когда нижестоящая система отклонит его.

TL;DR: Чтобы преобразовать JSON в XML, сопоставьте каждый ключ объекта с элементом, каждый @-предварительно исправленный ключ к атрибуту на его родительском элементе и #text ключ к элементу&#39;s текстового содержимого.Expand каждый массив в повторяющиеся элементы sibling, которые разделяют ключ&#39;s имени.Escape &, <, и > в тексте (плюс " в значениях атрибутов), и очистить любой ключ, который является &#39;t законное XML имя.Сделайте это в браузере, чтобы полезные нагрузки с токенами или данными клиента никогда не покидали вашу машину.

Зачем вам вообще конвертировать JSON в XML?

JSON выиграл войну веб-API много лет назад, и если вы проведете дни в React, Laravel или Node, вы можете разумно спросить, когда вам &#39; когда-либо вообще понадобится XML. Ответ таков: постоянно, только не в тех местах, куда вы смотрите. XML - это лингва-франка огромной установленной базы систем, которые появились еще до эпохи JSON и никуда не денутся. Веб-сервисы SOAP - по-прежнему основа банковского дела, страхования, логистики и государственной интеграции - несут свою полезную нагрузку в XML. Ленты RSS и Atom - это XML. Карты сайтов - это XML. Макеты Android, .docx а .xlsx внутренние каналы (Office Open XML), SVG, RSS подкасты, и бесчисленные B2B EDI-стиль обмена все XML.

Таким образом, реальный сценарий почти всегда имеет одну и ту же форму: у вас есть данные на JSON, потому что это &#39;s то, что производит ваш стек, и вам это нужно на XML, потому что это &#39;s то, что требует другая сторона. Может быть, вы и #39;переносите данные о продукте на торговую площадку, которая принимает только XML-канал. Может быть, вы и #39;переворачиваете ответ API в тело SOAP. Может быть, вы и #39; создаете RSS-канал из экспорта контента JSON. В каждом случае вы не хотите & #39; не хотите каждый раз изобретать сериализацию заново - вам нужно предсказуемое правило, которое превращает любую структуру JSON в действительный XML, чтобы вы могли автоматизировать ее и перестать об этом думать.

Там &#39;s также более тихая причина: читаемость во время отладки. Когда вы &#39; смотрите на глубоко вложенный блок JSON, пытаясь понять иерархию, преобразование его в XML с отступом иногда приводит к выскочке древовидной структуры, потому что теги XML&#39;s открытия/закрытия делают вложение явным таким образом, что JSON&#39;s подтяжки don&#39;t. Я сохраняю Конвертер JSON в XML а наоборот XML в JSON конвертер открывайте на соседних вкладках чаще, чем предполагал I&#39;d.

Как именно JSON сопоставляется с XML?

Вот суть его Есть только четыре правила, а все остальное - деталь.

Правило 1: Объектные ключи становятся элементами. Объект JSON { "book": { "title": "..." } } становиться <book><title>...</title></book>. Ключ - это имя тега; значение - это то, что входит внутрь.

Правило 2: @-префиксные ключи становятся атрибутами. Элементы XML могут нести атрибуты, и JSON не имеет собственного понятия о них, поэтому нам нужно соглашение. широко используемый - и тот, который использует мой инструмент - является префиксным символом, @ по умолчанию. так { "book": { "@id": "bk101", "title": "..." } } становиться <book id="bk101"><title>...</title></book>. Атрибуты могут содержать только примитивные значения (строки, числа, логические значения), никогда не вложенные структуры, что соответствует тому, как на самом деле работают атрибуты XML.

Правило 3: The #text ключ становится текстовым контентом. Когда элемент нуждается оба атрибуты и текст - думать <title lang="en">Hello</title> - вы можете &#39;t выразить это простым строковым значением, потому что строка не оставляет места для атрибута. Соглашение - это зарезервированный ключ, #text, { "title": { "@lang": "en", "#text": "Hello" } }. Если элемент имеет только текст и не имеет атрибутов, вы можете пропустить #text и просто используйте простое строковое значение.

Правило 4: Массивы становятся повторяющимися элементами. Это тот, кто ошибается чаще всего. XML не имеет типа массива. список вещей выражается как повторяющиеся элементы-братья с одним и тем же именем тега. так { "tags": { "tag": ["computer", "web"] } } становиться <tags><tag>computer</tag><tag>web</tag></tags> - нет <tag>0</tag> или любая ерунда на основе индексов.The array&#39;s ключ поставляет повторяющееся имя тега.

Соберите их вместе на реалистичный объект, и результат будет именно таким, как ожидает нижестоящий анализатор XML:

{
  "catalog": {
    "book": [
      { "@id": "bk101", "author": "Gambardella, Matthew", "price": 44.95 },
      { "@id": "bk102", "author": "Ralls, Kim", "price": 5.95 }
    ]
  }
}

становиться

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
  <book id="bk101">
    <author>Gambardella, Matthew</author>
    <price>44.95</price>
  </book>
  <book id="bk102">
    <author>Ralls, Kim</author>
    <price>5.95</price>
  </book>
</catalog>

Обратите внимание, что единственная клавиша верхнего уровня, catalog, стал корневым элементом document&#39;s. That&#39;s преднамеренно: хорошо сформированный XML-документ должен иметь ровно один корень. когда ваш JSON уже имеет один ключ упаковки, этот ключ есть корень. Когда это не так &#39;t - когда вы передаете конвертеру объект с несколькими ключами или голый массив - инструмент оборачивает все под настраиваемый корневой элемент (root по умолчанию), поэтому выходные данные остаются хорошо сформированными.

А как насчет побега и недействительных имен?

Две вещи незаметно нарушают больше конверсий, чем любая ошибка вложения: неэкранированные специальные символы и имена незаконных элементов.

Побег. XML оставляет несколько символов. Текст внутреннего элемента, &, <, и > должно быть написано как &amp;, &lt;, и &gt;. Внутри значения атрибута с двойными кавычками вам дополнительно необходимо избежать двойной кавычки как &quot;. Если ваша строка JSON содержит Tom & Jerry и вы опускаете его в XML необработанный, голый амперсанд делает документ искаженным, и синтаксический анализатор умирает. Правильный преобразователь выходит автоматически, так что "a < b & c" становиться a &lt; b &amp; c в выводе и туда и обратно к исходному тексту при анализе Это не необязательная полировка - it&#39;s разница между действительным и недействительным XML.

Имена элементов. В XML действуют строгие правила относительно того, что может содержать имя тега.Names can&#39;t включают пробелы, can&#39;t начинаются с цифры, дефиса или точки, и исключают большинство пунктуаций.JSON-ключи не имеют таких ограничений - "first name", "123", и "total($)" все являются совершенно законными ключами JSON и всеми незаконными именами XML. конвертер, который игнорирует это, производит документы, которые ни один синтаксический анализатор не примет. прагматическое исправление, и то, что делает мой инструмент, - это очистить: заменить незаконные символы подчеркиваниями и подготовить подчеркивание, когда имя начинается с цифры. Итак "123 bad" становиться <_123_bad>. It&#39;s не гламурный, но гарантирует анализ вывода, который представляет собой всю суть.

Как использовать браузерный конвертер?

Рабочий процесс включен Toolz.dev/tools/json-to-xml отражает приведенные выше правила, предлагая несколько вариантов практических крайних случаев.

Вставьте свой JSON во вход и нажмите Convert. если ваш JSON неверен, вы получаете явную ошибку анализа, а не бесшумный мусор - я опираюсь на браузер и #39;s собственный JSON.parseтаким образом, сообщения об ошибках соответствуют тому, что вы &#39;d видите в своей консоли. Выберите 2 или 4 пробела отступов, когда вам нужен удобочитаемый документ для просмотра, или выберите Minify, чтобы свернуть все это в одну строку, когда вы &#39; повторно отправляете его по проводу и каждый байт имеет значение (особенно запросы SOAP и полезные данные ленты). Установите имя корневого элемента для случая, когда у вашего JSON нет единого ключа обертывания. Переключить объявление XML (<?xml version="1.0" encoding="UTF-8"?>) включительно или выключено в зависимости от того, ожидает ли потребитель пролога. И решить, следует ли пустым узлам самозакрываться как <tag/> или расширить до <tag></tag> - некоторым строгим потребителям это небезразлично.

Все работает на стороне клиента. конвертер представляет собой сериализатор без зависимостей, написанный на TypeScript, а не оболочку вокруг удаленного API. Это имеет большее значение, чем звучит: ответы API и файлы конфигурации обычно содержат токены доступа, записи клиентов и внутренние идентификаторы, а также &quot;бесплатный онлайн-конвертер и котировки; что POSTS ваша полезная нагрузка кому-то и #39;s сервер - это утечка данных, ожидающая своего часа. Поскольку этот никогда не вызывает сетевой вызов, вы можете безопасно конвертировать конфиденциальные данные, и он продолжает работать вообще без подключения. Если вы думаете о конфиденциальности в инструментах браузера - и если вы обрабатываете данные других людей и #39;s, это должно быть - я написал об этом больше в Руководство по инструментам конфиденциальности данных, йо-

JSON против XML: быстрое сравнение

Это помогает сохранить два формата и №39; компромиссы в виду, потому что причина для картирования необходимы такие соглашения, как @ а #text это то, что XML может выражать вещи JSON can&#39;t, и наоборот.

Аспект JSON хм-лиг
атрибуты Никакого родного понятия Первоклассный (<tag attr="v">))
Массивы/списки Родной [ ] тип Повторные родственные элементы
замечания Не разрешается <!-- ... --> поддерживаемый
Пространства имен ни один Поддержка полного пространства имен
Смешанное содержание (текст + элементы) Неуклюжий Родной
Схема/проверка Схема JSON (дополнение) XSD, DTD, RELAX NG (зрелый)
многословие Компактный Более многословный (закрывающие теги)
Типичное использование сегодня Веб-API, конфигурация МЫЛО, ленты, документы, предприятие

выше @ существует префикс для объединения &quot;attributes&quot; ряд; правило повторных тегов объединяет &quot;arrays&quot; ряд; и #text соединяет & quot;mixed content & quot; row.Oncelly (англ.)русск. как только вы видите отображение как мост через эти конкретные пробелы, оно перестает чувствовать себя произвольным.

Чисто ли JSON-XML отправляется туда и обратно?

В основном, да - и это&#39;s по дизайну. Мой json в xml а XML в JSON инструменты имеют одно и то же @ префикс атрибута и #text ключ контента, так что преобразование XML → JSON и обратно в целом воспроизводит исходный документ. если вы &#39;ре строите конвейер, который должен перемещать данные в обоих направлениях, на эту симметрию стоит положиться.

Где округление-tripping становится нечетким - это одно и то же место, где каждое сопоставление JSON/XML становится нечетким: порядок и смешанный контент. Объекты JSON официально не упорядочены, поэтому конвертер может не сохранять точный порядок родственных элементов в элементах с разными именами. XML, который чередует текст и дочерние элементы (XML, который чередует текст и дочерние элементы)<p>Hello <b>world</b>!</p>) не имеет &#39;t имеет чистое представление JSON и возвращается в качестве приближения. А элемент, который иногда появляется один раз, а иногда появляется несколько раз, неоднозначен - это одно значение или массив из одного? Это ошибки &#39;t в каком-либо конкретном инструменте; они &#39; присущи тому факту, что две модели данных не полностью перекрываются. Знание того, где находятся швы, позволяет разработать свой JSON, чтобы преобразование оставалось без потерь: будьте последовательны в отношении того, всегда ли вещь является массивом, и избегайте смешанного контента там, где вы можете.

Если вы много работаете с JSON, стоит бегло использовать все семейство конверсий - я собрал те, к которым обращаюсь больше всего в мире Полное руководство по инструментам JSON, и шире Руководство по инструментам кодирования охватывает места, где преобразователи формата вписываются в повседневный рабочий процесс. Для обратного направления и соседних форматов JSON в YAML конвертер и равнина Форматтер JSON завершать сет.

Распространенные ошибки при преобразовании JSON в XML

Несколько ловушек I&#39; ударили или смотрели, как другие ударили:

Обработка индексов массива как имен тегов. Если увидите <item0>, <item1> в чьем-то & #39;s вывода, они построили преобразователь неправильно Массивы становятся повторяется теги с же имя, взятое из массива&#39;s ключ.

Забыть там может быть только один корень. Передача многоключевого объекта прямо в сериализатор без его обертывания приводит к образованию нескольких элементов верхнего уровня, что не является хорошо сформированным документом. Оберните его.

Пропуск бегства & quot;потому что данные выглядят чистыми. & quot; Он выглядит чистым, пока одно описание продукта не содержит амперсанд или а <. Всегда убегайте; никогда не предполагай.

Размещение структурированных данных в атрибутах. Атрибуты содержат примитивы. Если вы попытаетесь засунуть вложенный объект в @-префиксный ключ, правильный преобразователь откажется (и должен) от него или проигнорирует его, потому что там &#39;s нет для него действительного XML. Вместо этого смоделируйте его как дочерний элемент.

Дополнительно: выбор отступов и декларации для потребителя

Одна привычка, которая спасла меня, повторялась с партнерами по интеграции: сопоставляйте результат точно к тому, что ожидает потребитель, затем остановитесь. Некоторые конечные точки SOAP отклоняют документ, который включает в себя отметку байтового заказа или неожиданный пролог; другие требуют <?xml ... ?> декларация и 415 вы без нее. Некоторые валидаторы каналов хотят красиво напечатанный XML с отступом для собственной отладки; большинство производственных транспортов хотят, чтобы он был минифицирован. Вместо того, чтобы спорить, я генерирую любой вариант, который запрашивает спецификация. Это и № 39; почему конвертер раскрывает отступы (включая опцию минификации), переключатель объявлений и самозакрывающееся поведение в качестве первоклассных элементов управления - они и № 39; не украшение, они и № 39; это ручки, которые определяют, принимает ли придирчивый потребитель ваш документ с первой попытки.

часто задаваемые вопросы

Как преобразовать json в xml?

Вставьте свой JSON в редактор и нажмите Convert.Object ключи становятся XML элементами, массивы становятся повторяющимися тегами, и результат кажется готовым к копированию или загрузке.Загрузки нет - преобразование происходит в вашем браузере.

Как представлены атрибуты JSON в XML?

По соглашению, любой объектный ключ, который начинается с & quot;@& quot; префикс записывается как атрибут на его родительском элементе, а не как дочерний элемент. Например, {& quot;book& quot;: {& quot;@id& quot;: & quot;bk101& quot;, & quot;title& quot;: & quot;...& quot;}} становится .... Это отражает то, как инструмент XML-JSON считывает атрибуты обратно.

Как конвертер обрабатывает массивы JSON?

Каждый элемент массива излучается как повторяющийся элемент-брат, разделяющий имя ключа &#39;s. Итак {&quot;tags&quot;: {&quot;tag&quot;: [&quot;a&quot;, &quot;b&quot;]}} производит аб, именно так списки условно выражаются в XML - на каждый элемент нет пронумерованного индекса или элемента-обертки.

Для чего нужен текстовый ключ?

Когда элементу нужны и атрибуты, и текстовое содержимое, текст хранится под ключом & quot;#text&quot; {& quot;title& quot;: {& quot;@lang& quot;: & quot;en& quot;, & quot;#text& quot;: & quot;Hello& quot;}} становится Привет. Если элемент имеет только текст и не имеет атрибутов, вместо этого вы можете использовать простое строковое значение.

Могу ли я получить минимальный XML вместо выходного вывода?

да. Установите отступ на 0 (minify), и преобразователь выдает весь документ в одну строку без пробелов между тегами. Это полезно для запросов или каналов SOAP, где имеет значение размер полезной нагрузки; переключитесь на 2 или 4 пробела, когда вам нужен читаемый документ.

Что происходит с ключами, которые не являются допустимыми именами элементов XML?

Имена элементов XML не могут содержать пробелы, не могут начинаться с цифры, дефиса или точки и исключать большинство знаков препинания. клавиши, нарушающие эти правила, очищаются - недопустимые символы становятся подчеркиваниями, а при необходимости добавляется ведущее подчеркивание - поэтому выходные данные всегда анализируются, даже если ваши ключи JSON не были дружественны к XML.

Должна ли JSON в XML-окнообеданный с помощью инструмента XML в JSON?

Для общих структур это делает. этот инструмент и инструмент XML в JSON имеют один и тот же & quot;@ & quot; префикс атрибута и & quot;#text & quot; ключ контента, поэтому преобразование XML в JSON и обратно обычно воспроизводит один и тот же документ. Независимо от порядка детали и смешанный контент являются обычными источниками небольших различий, как и при любом сопоставлении XML/JSON.

Безопасно ли конвертировать здесь чувствительный JSON?

Да. конвертер является простым JavaScript, который полностью работает в вашем браузере - ничто из того, что вы вставляете, не передается на сервер, не регистрируется и не сохраняется. Это делает его безопасным для ответов API, конфигурирует файлы и записи, содержащие токены или персональные данные, и он продолжает работать без сетевого соединения.


Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!