JSON 转 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 Schema(XSD)时,理解这些映射规则尤为重要。
为什么使用在线 JSON 转 XML 工具?
手动将 JSON 转写为 XML 既繁琐又容易出错——标签不匹配、遗漏闭合元素、嵌套错误都会导致文档无法通过 Schema 验证。转换器可以自动完成结构翻译。
JSON 转 XML 使用场景
JSON 转 XML 映射规则
由于没有统一标准规范 JSON 到 XML 的转换,不同工具输出各异。下表展示了本转换器及常用库(js2xmlparser、xmlbuilder、fast-xml-parser)所采用的映射约定。数组采用重复同级元素的约定已成为主流,因为它与 XML Schema 建模集合的自然方式一致——每个元素是独立的一等公民,而非包装子元素——并且与 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 的可运行代码片段。每个示例均从一个示例 JSON 对象生成格式正确的 XML。
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>
// → ...
}