แปลง JSON เป็น XML
แปลง JSON เป็นรูปแบบ XML
อินพุต JSON
เอาต์พุต XML
การแปลง JSON เป็น XML คืออะไร?
JSON (JavaScript Object Notation) และ XML (eXtensible Markup Language) คือสองรูปแบบการแลกเปลี่ยนข้อมูลหลักในการพัฒนาซอฟต์แวร์ JSON ใช้คู่ key-value และ arrays ในไวยากรณ์ที่กระชับ ขณะที่ XML ครอบข้อมูลด้วยแท็กเปิดและแท็กปิดพร้อม attributes ตามต้องการ การแปลง JSON เป็น XML คือการแปลงโครงสร้างพื้นฐานของ JSON — objects, arrays, strings, numbers, booleans และ null — ให้เป็นเอกสาร XML ที่ถูกต้องพร้อมการซ้อนขององค์ประกอบที่ตรงกัน
XML ยังคงเป็นรูปแบบที่จำเป็นในระบบองค์กรหลายแห่ง, government APIs, SOAP web services และมาตรฐานอุตสาหกรรมอย่าง HL7 (สาธารณสุข), FpML (การเงิน) และ XBRL (การรายงานทางการเงิน) เมื่อแอปพลิเคชันของคุณผลิตข้อมูลเป็น JSON แต่ระบบปลายทางต้องการ XML ตัวแปลง JSON เป็น XML จะจัดการการแปลงนั้นโดยไม่ต้องปรับโครงสร้างด้วยมือ การแปลงเป็นไปตามกฎการแมปที่คาดเดาได้: JSON objects กลายเป็น XML elements, รายการใน array กลายเป็น sibling elements ที่ซ้ำกัน และค่า primitive กลายเป็น text nodes
ไม่มี RFC หรือมาตรฐาน W3C ฉบับเดียวที่กำหนดวิธีแมป JSON ไปยัง XML ไลบรารีต่างๆ ผลิตผลลัพธ์ที่แตกต่างกันสำหรับ input เดียวกัน แนวทางที่พบบ่อยที่สุด (ที่เครื่องมือนี้ใช้) คือครอบทั้งเอกสารด้วย root element ที่กำหนดค่าได้ แปลง JSON key แต่ละตัวเป็น XML child element และแสดง array items เป็น elements ที่ซ้ำกันที่มีชื่อแท็กเดียวกัน การเข้าใจกฎการแมปเหล่านี้มีความสำคัญเมื่อระบบรับต้องการ XML schema (XSD) เฉพาะ
ทำไมต้องใช้ตัวแปลง JSON เป็น XML ออนไลน์?
การเขียน XML ด้วยมือจาก JSON ต้นทางนั้นน่าเบื่อและเกิดข้อผิดพลาดได้ง่าย แท็กที่ไม่ตรงกัน, การลืมแท็กปิด และการซ้อนที่ไม่ถูกต้องทำให้เอกสารไม่ผ่านการตรวจสอบ schema ตัวแปลงจัดการการแปลงโครงสร้างนั้นโดยอัตโนมัติ
กรณีใช้งานการแปลง JSON เป็น XML
กฎการแมป JSON เป็น XML
เนื่องจากไม่มีมาตรฐานสากลที่กำกับการแปลง JSON เป็น XML เครื่องมือต่างๆ จึงผลิตผลลัพธ์ที่แตกต่างกัน ตารางด้านล่างแสดงแนวทางการแมปที่เครื่องมือนี้และไลบรารียอดนิยมใช้ (js2xmlparser, xmlbuilder, fast-xml-parser) แนวทาง repeated-sibling สำหรับ arrays กลายเป็นที่นิยมเพราะสะท้อนวิธีที่ XML schemas จำลอง collections อย่างเป็นธรรมชาติ — แต่ละรายการเป็น element ชั้นหนึ่งแทนที่จะเป็น child ที่ครอบอยู่ — และทำงานร่วมกับ XPath queries และ XSLT transforms ได้อย่างลงตัว
| 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 object ตัวอย่าง
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>
// → ...
}