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 API.

Приклади коду

Нижче наведені робочі приклади конвертації 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. Вони обробляють документ поступово, не завантажуючи все дерево в пам'ять.