XML to JSON

Преобразует XML в формат JSON

Попробовать пример

Входные данные XML

Выходные данные JSON

Работает локально · Безопасно вставлять секреты
JSON появится здесь…

Что такое преобразование XML в JSON?

Преобразование XML в JSON — это процесс трансформации данных из формата Extensible Markup Language (XML) в JavaScript Object Notation (JSON). Оба формата представляют структурированные иерархические данные, но используют разный синтаксис и модели данных. XML использует открывающие и закрывающие теги с необязательными атрибутами, тогда как JSON — пары ключ-значение, массивы и примитивные типы. Преобразование XML в JSON позволяет работать с данными XML в средах, где JSON является нативным форматом: JavaScript-окружениях, REST API и NoSQL-базах данных.

Преобразование не всегда взаимно однозначно. В XML есть конструкции, не имеющие прямого аналога в JSON: атрибуты, смешанное содержимое (текст вперемежку с дочерними элементами), инструкции по обработке, комментарии, секции CDATA и объявления пространств имён. Разные библиотеки обрабатывают эти конструкции по-разному, что породило множество соглашений. Наиболее распространённый подход — добавлять к именам атрибутов префикс @ и помещать текстовое содержимое в поле #text, когда у элемента одновременно есть атрибуты.

Преобразование XML в JSON — распространённый шаг при переходе с SOAP на REST, при работе с устаревшими корпоративными API или при обработке государственных и финансовых потоков данных, которые требуют XML. Вместо того чтобы одновременно переписывать производителей и потребителей данных, команды конвертируют XML-нагрузку на граничном уровне и передают JSON дальше по цепочке. AWS API Gateway, Apache Camel и MuleSoft поддерживают этот подход нативно.

XML input
<bookstore>
  <book category="fiction">
    <title lang="en">The Great Gatsby</title>
    <author>F. Scott Fitzgerald</author>
    <year>1925</year>
    <price>10.99</price>
  </book>
  <book category="non-fiction">
    <title lang="en">Sapiens</title>
    <author>Yuval Noah Harari</author>
    <year>2011</year>
    <price>14.99</price>
  </book>
</bookstore>
JSON output
{
  "bookstore": {
    "book": [
      {
        "@category": "fiction",
        "title": {
          "@lang": "en",
          "#text": "The Great Gatsby"
        },
        "author": "F. Scott Fitzgerald",
        "year": "1925",
        "price": "10.99"
      },
      {
        "@category": "non-fiction",
        "title": {
          "@lang": "en",
          "#text": "Sapiens"
        },
        "author": "Yuval Noah Harari",
        "year": "2011",
        "price": "14.99"
      }
    ]
  }
}

Зачем использовать онлайн-конвертер XML в JSON?

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

Мгновенное преобразование
Вставьте XML и сразу получите JSON. Не нужно устанавливать библиотеку, писать скрипт или настраивать инструмент сборки.
🔒
Обработка без передачи данных
Всё преобразование выполняется в браузере средствами JavaScript. Ваши XML-данные никогда не покидают компьютер и не отправляются ни на какой сервер.
🔀
Поддержка атрибутов и массивов
Атрибуты сопоставляются с ключами с префиксом @. Повторяющиеся соседние элементы автоматически группируются в JSON-массивы согласно соглашениям Parker или BadgerFish.
📋
Без аккаунта
Откройте страницу, вставьте XML и скопируйте JSON-результат. Никакой регистрации, API-ключей или лимитов использования.

Сценарии использования конвертера XML в JSON

Frontend-разработка
Преобразуйте XML-ответы API в JSON, чтобы отображать данные в компонентах React, Vue или Angular без добавления библиотеки для разбора XML в клиентский бандл.
Backend-разработка
Трансформируйте SOAP-нагрузки, RSS/Atom-ленты или XML-RPC-ответы в JSON на уровне API-шлюза перед передачей данных микросервисам, ожидающим JSON на входе.
DevOps и CI/CD
Преобразуйте XML-отчёты о тестировании (JUnit, NUnit, xUnit) в JSON для загрузки в дашборды, Slack-боты или собственные конвейеры CI-уведомлений.
QA и тестирование
Сравнивайте преобразованные JSON-снимки с ожидаемым выводом, чтобы убедиться, что сервис, генерирующий XML, не изменил структуру ответа между релизами.
Инженерия данных
Преобразуйте XML-экспорты с государственных порталов, финансовые потоки данных (FIX, FIXML) или медицинские данные (HL7 CDA) в JSON для загрузки в BigQuery, Snowflake или Elasticsearch.
Изучение форматов данных
Студенты, изучающие обмен данными, могут вставлять XML-примеры в конвертер, чтобы наглядно увидеть, как элементы, атрибуты и вложенность отображаются в JSON-ключи, объекты и массивы.

Справочник по сопоставлению XML и JSON

XML и JSON имеют разные модели данных. В таблице ниже показано, как каждая конструкция XML сопоставляется с эквивалентом в JSON по наиболее распространённому соглашению (@ для атрибутов, #text для текста при наличии атрибутов). Некоторые конструкции, например смешанное содержимое и комментарии, не имеют стандартного представления в JSON.

Конструкция XMLПример XMLЭквивалент в JSON
Element<name>text</name>"name": "text"
Nested elements<a><b>1</b></a>"a": { "b": "1" }
Attributes<el attr="v"/>"el": { "@attr": "v" }
Text + attributes<el a="1">text</el>"el": { "@a": "1", "#text": "text" }
Repeated elements<r><i>1</i><i>2</i></r>"r": { "i": ["1", "2"] }
Mixed content<p>A <b>B</b> C</p>Varies by convention
CDATA<![CDATA[raw]]>"#cdata": "raw" or flattened
Namespacesxmlns:prefix="uri"Prefix preserved or stripped
Empty element<el/>"el": null or ""
Comments<!-- note -->Discarded (no JSON equivalent)

Сравнение соглашений по преобразованию XML в JSON

Единого стандарта преобразования XML в JSON не существует. Широко используются три соглашения, каждое со своими компромиссами в части обработки атрибутов, определения массивов и сохранения текста.

BadgerFish
Каждый текстовый узел помещается в ключ $. Атрибуты получают ключи с префиксом @. Пространства имён сохраняются как записи @xmlns. Многословен, но без потерь: можно выполнить обратное преобразование в XML без потери данных.
Parker
Полностью отбрасывает атрибуты, а элементы, содержащие только текст, преобразует в простые значения. Повторяющиеся элементы становятся массивами. Компактен и чист, но деструктивен: атрибуты и информация о пространствах имён теряются.
GData (Google Data)
Использует $t для текстового содержимого и сохраняет атрибуты как ключи верхнего уровня без префикса. Золотая середина между подробностью BadgerFish и простотой Parker. Исторически использовался в Google APIs.

Примеры кода

Ниже приведены рабочие примеры преобразования XML в JSON на JavaScript, Python, Go и в командной строке. Каждый пример обрабатывает вложенные элементы и повторяющиеся соседние теги.

JavaScript (browser)
// Using the DOMParser API to walk XML and build a JSON object
function xmlToJson(xml) {
  const parser = new DOMParser()
  const doc = parser.parseFromString(xml, 'application/xml')

  function nodeToObj(node) {
    const obj = {}
    // Handle attributes
    if (node.attributes) {
      for (const attr of node.attributes) {
        obj['@' + attr.name] = attr.value
      }
    }
    // Handle child nodes
    for (const child of node.childNodes) {
      if (child.nodeType === 3) { // text
        const text = child.textContent.trim()
        if (text) obj['#text'] = text
      } else if (child.nodeType === 1) { // element
        const key = child.nodeName
        const val = nodeToObj(child)
        if (obj[key]) {
          if (!Array.isArray(obj[key])) obj[key] = [obj[key]]
          obj[key].push(val)
        } else {
          obj[key] = val
        }
      }
    }
    // Simplify text-only nodes
    const keys = Object.keys(obj)
    if (keys.length === 1 && keys[0] === '#text') return obj['#text']
    return obj
  }

  return nodeToObj(doc.documentElement)
}

const xml = '<user><name>Alice</name><role>admin</role></user>'
console.log(JSON.stringify(xmlToJson(xml), null, 2))
// → { "name": "Alice", "role": "admin" }
Python
import xmltodict
import json

xml = """
<user>
  <name>Alice</name>
  <roles>
    <role>admin</role>
    <role>editor</role>
  </roles>
</user>
"""

# xmltodict converts XML to an OrderedDict
result = xmltodict.parse(xml)
print(json.dumps(result, indent=2))
# → {
# →   "user": {
# →     "name": "Alice",
# →     "roles": { "role": ["admin", "editor"] }
# →   }
# → }

# With the standard library (xml.etree.ElementTree)
import xml.etree.ElementTree as ET

def etree_to_dict(elem):
    d = {}
    if elem.attrib:
        d.update({f"@{k}": v for k, v in elem.attrib.items()})
    for child in elem:
        child_data = etree_to_dict(child)
        if child.tag in d:
            if not isinstance(d[child.tag], list):
                d[child.tag] = [d[child.tag]]
            d[child.tag].append(child_data)
        else:
            d[child.tag] = child_data
    if elem.text and elem.text.strip():
        if d:
            d["#text"] = elem.text.strip()
        else:
            return elem.text.strip()
    return d

root = ET.fromstring(xml)
print(json.dumps(etree_to_dict(root), indent=2))
Go
package main

import (
    "encoding/json"
    "encoding/xml"
    "fmt"
    "strings"
)

// For simple, known schemas — define a struct
type User struct {
    XMLName xml.Name `xml:"user"`
    Name    string   `xml:"name"`
    Roles   []string `xml:"roles>role"`
}

func main() {
    data := `<user><name>Alice</name><roles><role>admin</role><role>editor</role></roles></user>`
    var user User
    xml.NewDecoder(strings.NewReader(data)).Decode(&user)

    out, _ := json.MarshalIndent(user, "", "  ")
    fmt.Println(string(out))
    // → { "Name": "Alice", "Roles": ["admin", "editor"] }
}
CLI (xmllint + jq / yq)
# Using xq (part of yq, a jq wrapper for XML)
# Install: pip install yq  OR  brew install yq
echo '<user><name>Alice</name></user>' | xq .
# → { "user": { "name": "Alice" } }

# Using xmlstarlet + jq
xmlstarlet sel -t -v '//name' input.xml | jq -R '{ name: . }'

# Node.js one-liner with xml2js
echo '<a><b>1</b></a>' | node -e "
  const {parseString} = require('xml2js');
  let d=''; process.stdin.on('data',c=>d+=c);
  process.stdin.on('end',()=>parseString(d,(e,r)=>console.log(JSON.stringify(r,null,2))))
"

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

Является ли преобразование XML в JSON обратимым?
Не всегда. Атрибуты XML, комментарии, инструкции по обработке и объявления пространств имён не имеют прямого аналога в JSON. Большинство конвертеров сохраняют атрибуты через соглашение с префиксом @, но комментарии и инструкции по обработке отбрасываются. Если нужна полностью обратимая конвертация, используйте соглашение BadgerFish.
Как атрибуты XML представляются в JSON?
Наиболее распространённый подход — добавлять к именам атрибутов префикс @. Например, <book id="1"> становится {"@id": "1"}. Некоторые конвертеры вместо этого используют вложенный объект "_attributes". Конкретное соглашение зависит от используемой библиотеки.
Как конвертер обрабатывает повторяющиеся XML-элементы?
Когда элемент встречается более одного раза под одним родителем, конвертер группирует их в JSON-массив. Например, два соседних элемента item становятся {"item": ["a", "b"]}. Одиночный элемент item остаётся простым строковым значением, если только не включён режим принудительного создания массивов.
Можно ли преобразовать JSON обратно в XML?
Да, но результат зависит от соглашения, использованного при исходном преобразовании. Если атрибуты были сохранены с префиксами @, конвертер JSON в XML сможет их восстановить. Если исходное преобразование выполнялось по Parker (которое отбрасывает атрибуты), эта информация безвозвратно потеряна. В ToolDeck также есть инструмент JSON to XML для обратного преобразования.
Что происходит с пространствами имён XML при конвертации?
Обработка пространств имён зависит от библиотеки. Одни конвертеры сохраняют префикс в имени ключа (например, "ns:element"), другие преобразуют объявления xmlns в отдельные поля, третьи полностью удаляют пространства имён. Проверяйте вывод для конкретного XML, чтобы убедиться в корректной обработке пространств имён.
Существует ли стандарт преобразования XML в JSON?
Формального стандарта W3C или IETF не существует. Ближайшие ориентиры — соглашение BadgerFish, соглашение Parker и сопоставление OASIS XSLT-to-JSON. На практике каждая библиотека реализует собственные правила, поэтому один и тот же XML может дать слегка отличающийся JSON в разных инструментах.
Как работать с большими XML-файлами?
Браузерные конвертеры хорошо справляются с файлами размером до нескольких мегабайт. Для более крупных файлов (от 10 МБ) используйте потоковый парсер: iterparse (xml.etree.ElementTree) в Python или xml-stream в Node.js. Они обрабатывают документ поэтапно, не загружая всё дерево в память.