XML vs JSON: ทำความเข้าใจรูปแบบข้อมูลสำหรับ APIs และไฟล์ Config
เปรียบเทียบ XML และ JSON เรียนรู้ว่าควรใช้อะไรเมื่อไหร่ และเชี่ยวชาญเครื่องมือสำหรับการแปลง ตรวจสอบ และ query ข้อมูลที่มีโครงสร้าง
ทุกแอปพลิเคชันที่สื่อสารกับโลกภายนอกต่างแลกเปลี่ยนข้อมูลในรูปแบบที่มีโครงสร้างบางอย่าง XML ครองตลาดในยุค 2000s ส่วน JSON เข้ามาแทนที่ในช่วง 2010s แต่ XML ก็ยังไม่ได้หายไปไหน — มันยังคงขับเคลื่อน SOAP APIs, RSS feeds, SVG graphics, Android layouts และระบบองค์กรอีกนับไม่ถ้วน การเข้าใจทั้งสองรูปแบบจะทำให้คุณเป็นนักพัฒนาที่มีความสามารถรอบด้านมากขึ้น
JSON ในมุมมองรวบรัด
JSON (JavaScript Object Notation) คือภาษากลางของ web APIs ยุคใหม่ มันแมปตรงกับชนิดข้อมูลที่พบในภาษาโปรแกรมส่วนใหญ่:
{
"user": {
"id": 42,
"name": "Alice Chen",
"roles": ["admin", "editor"],
"active": true,
"score": 98.6,
"avatar": null
}
}
ชนิดข้อมูล: string, number, boolean, null, array, object
JSON กระชับ อ่านง่าย และ parse ได้อย่างง่ายดายในทุกภาษา เป็นตัวเลือกหลักสำหรับ REST APIs, ไฟล์ configuration และการจัดเก็บข้อมูลในเบราว์เซอร์
XML ในมุมมองรวบรัด
XML (eXtensible Markup Language) แสดงข้อมูลในรูปแบบของ tree ที่ประกอบด้วย element ที่มี tag:
<?xml version="1.0" encoding="UTF-8"?>
<user id="42">
<name>Alice Chen</name>
<roles>
<role>admin</role>
<role>editor</role>
</roles>
<active>true</active>
<score>98.6</score>
</user>
XML มีความยาวมากกว่าแต่มีความสามารถในการแสดงออกสูง รองรับ attributes (เช่น id="42" ด้านบน), namespaces (สำหรับการผสม vocabulary), comments, processing instructions และ schemas สำหรับการตรวจสอบที่เข้มงวด
การเปรียบเทียบแบบเคียงข้างกัน
| คุณสมบัติ | JSON | XML |
|---|---|---|
| ความยาว | กระชับ | ยืดยาว |
| ชนิดข้อมูล | 6 ชนิดแบบ native | ทุกอย่างเป็น text |
| Comments | ❌ ไม่รองรับ | ✅ <!-- --> |
| Attributes | ❌ ไม่มีแนวคิดนี้ | ✅ มี |
| Namespaces | ❌ ไม่มีแนวคิดนี้ | ✅ มี |
| Schemas | JSON Schema | XSD, DTD, RelaxNG |
| Query language | JSONPath, jq | XPath, XQuery |
| XSLT transforms | ❌ | ✅ |
| ความอ่านง่ายสำหรับมนุษย์ | สูง | ปานกลาง |
| ความซับซ้อนในการ parse | ต่ำ | สูงกว่า |
เมื่อไหร่ควรใช้ JSON
- REST APIs (แพร่หลายโดยทั่วไป)
localStorage/sessionStorageของเบราว์เซอร์- ไฟล์ configuration (
package.json,tsconfig.json) - NoSQL document stores (MongoDB, Firestore)
- การสื่อสารระหว่าง service ใน microservices
- ทุกที่ที่ต้องการแลกเปลี่ยนข้อมูลที่รวดเร็วและเบา
เมื่อไหร่ควรใช้ XML
- SOAP web services (การเงิน, การแพทย์, ภาครัฐ)
- RSS และ Atom feeds
- SVG graphics
- ไฟล์ resource ของ Android (layouts, strings, manifests)
- รูปแบบเอกสาร Office (
.docx,.xlsxคือไฟล์ ZIP ที่บรรจุ XML) - เมื่อต้องการ mixed content (ข้อความที่มี inline markup)
- ระบบองค์กรที่ยังไม่ได้ย้ายมาใช้ JSON
การแปลงระหว่างรูปแบบ
การแปลง XML เป็น JSON ไม่ใช่การ mapping แบบ 1 ต่อ 1 เสมอไป — XML มีแนวคิด (attributes, text nodes, namespaces) ที่ไม่มีใน JSON กลยุทธ์ที่ใช้กันทั่วไปมีดังนี้:
Attributes กลายเป็น properties
<user id="42" active="true">Alice</user>
อาจกลายเป็น:
{ "@id": "42", "@active": "true", "#text": "Alice" }
หรือแบบ flatten:
{ "id": 42, "active": true, "name": "Alice" }
แนวทางที่เหมาะสมขึ้นอยู่กับการใช้งานของคุณ ใช้ XML to JSON Converter ของเราเพื่อจัดการการแปลงพร้อมตัวเลือกสำหรับการจัดการ attribute
การตรวจสอบ JSON ด้วย JSON Schema
JSON Schema ช่วยให้คุณกำหนดโครงสร้างที่คาดหวังของเอกสาร JSON:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": ["id", "name", "email"],
"properties": {
"id": { "type": "integer", "minimum": 1 },
"name": { "type": "string", "minLength": 1 },
"email": { "type": "string", "format": "email" },
"roles": {
"type": "array",
"items": { "type": "string" }
}
}
}
ตรวจสอบเอกสาร JSON ของคุณกับ schema ด้วย JSON Schema Validator ของเรา — ตรวจจับข้อผิดพลาดด้านโครงสร้างก่อนที่จะถึง production
JSONPath: การ query ข้อมูลที่ซ้อนกัน
JSONPath มีความสัมพันธ์กับ JSON เหมือนที่ XPath มีกับ XML ไวยากรณ์การ query:
$.store.book[*].author — ผู้แต่งทั้งหมด
$.store.book[0].title — ชื่อหนังสือเล่มแรก
$.store.book[?(@.price < 10)] — หนังสือที่ราคาต่ำกว่า $10
$..price — ค่า price ทั้งหมดไม่ว่าจะอยู่ที่ไหน
XPath ที่เทียบเท่าสำหรับ XML:
/store/book/author — ผู้แต่งทั้งหมด
/store/book[1]/title — ชื่อหนังสือเล่มแรก
/store/book[@price < 10] — หนังสือที่ราคาต่ำกว่า $10
//price — ค่า price ทั้งหมดไม่ว่าจะอยู่ที่ไหน
การจัดรูปแบบและ pretty-printing
ทั้งสองรูปแบบอ่านยากมากเมื่อถูก minify เสมอ pretty-print เพื่อการ debug และการตรวจสอบโดยมนุษย์
JSON แบบ minified:
{"user":{"id":42,"name":"Alice Chen","roles":["admin","editor"]}}
JSON แบบ pretty-printed (ย่อหน้า 2 ช่องว่าง):
{
"user": {
"id": 42,
"name": "Alice Chen",
"roles": [
"admin",
"editor"
]
}
}
ใช้ JSON Formatter ของเราเพื่อ pretty-print, minify และตรวจสอบ JSON ได้ทันที สำหรับการเปรียบเทียบ JSON สอง blob ใช้ JSON Diff ที่ไฮไลต์สิ่งที่เปลี่ยนแปลงไปอย่างชัดเจน
ข้อผิดพลาดที่พบบ่อย
JSON
- Trailing commas — ไม่ valid ใน JSON (แต่ valid ใน JavaScript)
- Single quotes — JSON กำหนดให้ใช้ double quotes สำหรับ string
- ตัวเลขในรูปแบบ string —
"42"≠42; ควรใช้ให้สอดคล้องกัน - การซ้อนที่ลึกเกินไป — อ่านยากและ query ยาก; ทำให้แบนลงได้เท่าที่เป็นไปได้
XML
- ตัวอักษรที่ไม่ได้ escape —
<,>,&,",'ต้องถูก escape เป็น entities - BOM ที่ต้นไฟล์ — parser บางตัวติดปัญหากับ UTF-8 BOM
- ความสับสนของ namespace — ผิดพลาดได้ง่ายในเอกสารที่มีหลาย vocabulary
ทั้งสองรูปแบบเป็นที่เข้าใจดี มีเครื่องมือรองรับครบครัน และจะยังคงอยู่ต่อไป รู้ว่าควรใช้อะไรเมื่อไหร่ ตรวจสอบข้อมูลของคุณ แล้ว integration ของคุณจะน่าเชื่อถือมากขึ้นอย่างมาก