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-схеми природньо моделюють колекції — кожен елемент є повноцінним елементом, а не вкладеним дочірнім — і добре інтегрується з 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>
// → ...
}