JSON sang XML
Chuyển đổi JSON sang định dạng XML
Nhập JSON
Xuất XML
Chuyển đổi JSON sang XML là gì?
JSON (JavaScript Object Notation) và XML (eXtensible Markup Language) là hai định dạng trao đổi dữ liệu phổ biến nhất trong phát triển phần mềm. JSON sử dụng cặp khóa-giá trị và mảng với cú pháp gọn nhẹ, trong khi XML bao bọc dữ liệu trong các thẻ mở và đóng kèm thuộc tính tùy chọn. Chuyển đổi JSON sang XML có nghĩa là dịch các kiểu nguyên thủy cấu trúc của JSON — đối tượng, mảng, chuỗi, số, giá trị boolean và null — thành một tài liệu XML hợp lệ với cấu trúc lồng nhau tương ứng.
XML vẫn là định dạng bắt buộc trong nhiều hệ thống doanh nghiệp, API chính phủ, dịch vụ web SOAP và các tiêu chuẩn ngành như HL7 (y tế), FpML (tài chính) và XBRL (báo cáo tài chính). Khi ứng dụng của bạn tạo ra JSON nhưng hệ thống phía sau lại yêu cầu XML, một công cụ chuyển đổi JSON sang XML sẽ xử lý việc dịch mà không cần tái cấu trúc thủ công. Quá trình chuyển đổi tuân theo các quy tắc ánh xạ có thể dự đoán được: đối tượng JSON trở thành phần tử XML, các mục trong mảng trở thành các phần tử anh em lặp lại, và các giá trị nguyên thủy trở thành nút văn bản.
Không có một RFC hay tiêu chuẩn W3C nào định nghĩa cách JSON ánh xạ sang XML. Các thư viện khác nhau tạo ra đầu ra khác nhau cho cùng một đầu vào. Quy ước phổ biến nhất (được công cụ này sử dụng) bao bọc toàn bộ tài liệu trong một phần tử gốc có thể cấu hình, chuyển đổi mỗi khóa JSON thành phần tử con XML, và biểu diễn các mục trong mảng dưới dạng các phần tử lặp lại cùng tên thẻ. Hiểu các quy tắc ánh xạ này rất quan trọng khi hệ thống nhận áp dụng một XML schema (XSD) cụ thể.
Tại sao sử dụng công cụ chuyển đổi JSON sang XML trực tuyến?
Viết XML thủ công từ nguồn JSON rất tẻ nhạt và dễ gây lỗi. Thẻ không khớp, phần tử đóng bị quên, và cấu trúc lồng nhau sai sẽ tạo ra tài liệu không qua được kiểm tra schema. Một công cụ chuyển đổi xử lý việc dịch cấu trúc một cách tự động.
Các trường hợp sử dụng JSON sang XML
Quy tắc ánh xạ JSON sang XML
Do không có tiêu chuẩn chung nào quy định việc chuyển đổi JSON sang XML, các công cụ khác nhau tạo ra đầu ra khác nhau. Bảng dưới đây hiển thị các quy ước ánh xạ được sử dụng bởi công cụ này và hầu hết các thư viện phổ biến (js2xmlparser, xmlbuilder, fast-xml-parser). Quy ước phần tử anh em lặp lại cho mảng trở nên phổ biến vì nó phản ánh cách XML schema mô hình hóa tự nhiên các tập hợp — mỗi mục là phần tử hạng nhất chứ không phải con được bọc — và tích hợp gọn gàng với truy vấn XPath và phép biến đổi 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) |
Ví dụ code
Dưới đây là các đoạn code có thể chạy để chuyển đổi JSON sang XML trong ba môi trường. Mỗi ví dụ tạo ra XML hợp lệ từ một đối tượng JSON mẫu.
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>
// → ...
}