JSON to XML
Преобразует JSON в формат XML
Входные данные JSON
Выходные данные XML
Что такое конвертация JSON в XML?
JSON (JavaScript Object Notation) и XML (eXtensible Markup Language) — два доминирующих формата обмена данными в разработке программного обеспечения. JSON использует пары ключ-значение и массивы с компактным синтаксисом, тогда как XML оборачивает данные в открывающие и закрывающие теги с необязательными атрибутами. Конвертация JSON в XML означает перевод структурных примитивов JSON — объектов, массивов, строк, чисел, булевых значений и null — в правильно оформленный XML-документ с соответствующей вложенностью элементов.
XML по-прежнему является обязательным форматом во многих корпоративных системах, государственных API, SOAP-веб-сервисах и отраслевых стандартах, таких как HL7 (здравоохранение), FpML (финансы) и XBRL (финансовая отчётность). Когда ваше приложение выдаёт JSON, а принимающая система ожидает XML, конвертер JSON в XML выполняет преобразование без ручной реструктуризации. Конвертация следует предсказуемым правилам сопоставления: объекты JSON становятся элементами XML, элементы массивов становятся повторяющимися дочерними элементами, а примитивные значения превращаются в текстовые узлы.
Не существует единого RFC или стандарта W3C, определяющего, как JSON отображается в XML. Разные библиотеки дают разный результат для одних и тех же входных данных. Наиболее распространённое соглашение (используемое этим инструментом) оборачивает весь документ в настраиваемый корневой элемент, преобразует каждый ключ JSON в дочерний XML-элемент, а элементы массивов представляет как повторяющиеся элементы с одним именем тега. Понимание этих правил сопоставления важно, когда принимающая система требует соответствия конкретной XML-схеме (XSD).
Зачем использовать онлайн-конвертер JSON в XML?
Писать XML вручную из источника JSON — утомительно и ненадёжно. Непарные теги, забытые закрывающие элементы и неверная вложенность порождают документы, которые не проходят проверку по схеме. Конвертер выполняет структурное преобразование автоматически.
Сценарии использования JSON to XML
Правила сопоставления JSON и XML
Поскольку универсального стандарта конвертации JSON в XML не существует, разные инструменты дают разный результат. В таблице ниже приведены соглашения о сопоставлении, используемые этим конвертером и большинством популярных библиотек (js2xmlparser, xmlbuilder, fast-xml-parser). Соглашение о повторяющихся дочерних элементах для массивов стало доминирующим, потому что оно отражает то, как XML-схемы естественным образом моделируют коллекции: каждый элемент является полноценным XML-элементом, а не вложенным дочерним — и это удобно для XPath-запросов и XSLT-преобразований.
| JSON Type | JSON Example | XML Output |
|---|---|---|
| Object | {"name": "Alice"} | <name>Alice</name> |
| Nested object | {"user": {"age": 30}} | <user><age>30</age></user> |
| Array | {"colors": ["red", "blue"]} | <colors>red</colors><colors>blue</colors> |
| String | "hello" | <root>hello</root> |
| Number | 42 | <root>42</root> |
| Boolean | true | <root>true</root> |
| Null | null | <root/> |
| Empty object | {} | <root/> |
| Empty array | [] | (no child elements) |
Примеры кода
Ниже приведены готовые фрагменты кода для конвертации JSON в XML в трёх средах. Каждый пример создаёт правильно оформленный XML из образца JSON-объекта.
import { create } from 'xmlbuilder2';
const json = {
order: {
id: 1024,
items: [
{ sku: "A1", qty: 2 },
{ sku: "B3", qty: 1 }
],
shipped: false
}
};
const xml = create({ version: '1.0' })
.ele(json)
.end({ prettyPrint: true });
console.log(xml);
// → <?xml version="1.0"?>
// → <order>
// → <id>1024</id>
// → <items>
// → <sku>A1</sku>
// → <qty>2</qty>
// → </items>
// → <items>
// → <sku>B3</sku>
// → <qty>1</qty>
// → </items>
// → <shipped>false</shipped>
// → </order>import json
import xmltodict
data = {
"order": {
"id": 1024,
"items": [
{"sku": "A1", "qty": 2},
{"sku": "B3", "qty": 1}
],
"shipped": False
}
}
# xmltodict.unparse expects a single root key
xml = xmltodict.unparse(data, pretty=True)
print(xml)
# → <?xml version="1.0" encoding="utf-8"?>
# → <order>
# → <id>1024</id>
# → <items>
# → <sku>A1</sku>
# → <qty>2</qty>
# → </items>
# → <items>
# → <sku>B3</sku>
# → <qty>1</qty>
# → </items>
# → <shipped>false</shipped>
# → </order>package main
import (
"encoding/json"
"encoding/xml"
"fmt"
)
type Item struct {
SKU string `json:"sku" xml:"sku"`
Qty int `json:"qty" xml:"qty"`
}
type Order struct {
XMLName xml.Name `xml:"order"`
ID int `json:"id" xml:"id"`
Items []Item `json:"items" xml:"items"`
Shipped bool `json:"shipped" xml:"shipped"`
}
func main() {
raw := `{"id":1024,"items":[{"sku":"A1","qty":2},{"sku":"B3","qty":1}],"shipped":false}`
var order Order
json.Unmarshal([]byte(raw), &order)
out, _ := xml.MarshalIndent(order, "", " ")
fmt.Println(xml.Header + string(out))
// → <?xml version="1.0" encoding="UTF-8"?>
// → <order>
// → <id>1024</id>
// → <items>
// → <sku>A1</sku>
// → <qty>2</qty>
// → </items>
// → ...
}