JSON เทียบกับ XML: ควรเลือกรูปแบบข้อมูลแบบไหน?
ตอบด่วน
ใช้ JSON สำหรับ API, web app และไฟล์ config ที่ transfer น้ำหนักสำคัญ ใช้ XML สำหรับรูปแบบ document-heavy, SOAP service และระบบที่ต้อง schema validation JSON เป็น default สำหรับ web API สมัยใหม่; XML ยังเด่นใน enterprise SOAP และ RSS/Atom
การแนะนำ
JSON (JavaScript Object Notation) และ XML (eXtensible Markup Language) เป็นรูปแบบแลกเปลี่ยนข้อมูลที่ใช้มากสองแบบ JSON เป็นรูปแบบ text-based น้ำหนักจาก JavaScript XML เป็นภาษา markup ใช้ tag โครงสร้างข้อมูล ทั้งคู่อ่านและ parse ได้ แต่ต่างกันใน verbosity ความซับซ้อน และ ecosystem fit
ทีละขั้นตอน
-
เปรียบเทียบไวยากรณ์และการใช้คำฟุ่มเฟือย
JSON ใช้วงเล็บปีกกาและคู่คีย์-ค่า: {"name": "value"} XML ใช้แท็กเปิดและปิด: <name>value</name> XML ต้องใช้อักขระมากกว่าสำหรับข้อมูลเดียวกัน โดยทั่วไปแล้วจะมีไบต์มากกว่า JSON ถึง 30-60% JSON ไม่มีแท็กปิด ไม่มีแอตทริบิวต์และความแตกต่างขององค์ประกอบ และไม่มีค่าใช้จ่ายในการประกาศ
-
เปรียบเทียบประเภทข้อมูลและโครงสร้าง
JSON รองรับ 6 ประเภท: สตริง, ตัวเลข, บูลีน, null, อาร์เรย์, วัตถุ XML ไม่มีประเภทในตัว ทุกอย่างเป็นข้อความ เว้นแต่จะระบุผ่านสคีมา (XSD) XML รองรับแอตทริบิวต์ เนื้อหาแบบผสม และเนมสเปซ JSON ไม่มีสิ่งใดเลย ซึ่งทำให้ง่ายขึ้นแต่แสดงความหมายน้อยลงสำหรับข้อมูลที่เน้นเอกสารเป็นศูนย์กลาง
-
เปรียบเทียบการแยกวิเคราะห์และประสิทธิภาพ
JSON การแยกวิเคราะห์จะเร็วขึ้นใน JavaScript เพราะมันแมปกับวัตถุ JS โดยตรง (JSON.parse) XML ต้องใช้ตัวแยกวิเคราะห์ DOM หรือตัวแยกวิเคราะห์สตรีม SAX ซึ่งหนักกว่า ในการวัดประสิทธิภาพ โดยทั่วไปการแยกวิเคราะห์ JSON จะเร็วกว่าการแยกวิเคราะห์ XML DOM 2-5 เท่าสำหรับข้อมูลที่เทียบเท่ากัน
-
เปรียบเทียบระบบนิเวศและเครื่องมือ
JSON เป็นมาตรฐานโดยพฤตินัยสำหรับ REST APIs XML ใช้ใน SOAP APIs, ฟีด RSS/Atom, SVG, OOXML (Excel/Word) และรูปแบบการกำหนดค่า กรอบงานเว็บสมัยใหม่สนับสนุน JSON กรอบงานองค์กรยังคงใช้ XML อย่างกว้างขวาง
-
ตัดสินใจตามกรณีการใช้งานของคุณ
REST APIs, ฐานข้อมูล NoSQL, ไฟล์กำหนดค่า, AJAX/เว็บแอป: JSON บริการ SOAP, ฟีด RSS/Atom, กราฟิก SVG, เอกสารสำนักงาน, การส่งข้อความระดับองค์กร: XML
ตัวอย่าง
ข้อมูลเดียวกันใน JSON และ XML
ป้อนข้อมูล: JSON: {"user": {"id": 1, "name": "Alice", "active": true}}
XML: <user><id>1</id><name>Alice</name><active>true</active></user>
เอาท์พุต: JSON: 52 ไบต์ XML: 78 ไบต์ (มากกว่า 50%) ทั้งสองแสดงข้อมูลที่เหมือนกัน
ปัญหาทั่วไป
- XML การใช้คำฟุ่มเฟือย: XML สามารถมีขนาดใหญ่กว่า JSON ได้ 30-60% สำหรับข้อมูลเดียวกัน ส่งผลให้แบนด์วิดท์และพื้นที่จัดเก็บมีค่าใช้จ่ายเพิ่มขึ้น — ใช้ JSON สำหรับการแลกเปลี่ยนข้อมูลโดยที่ขนาดมีความสำคัญ
- JSON ไม่มีความคิดเห็น: JSON ข้อมูลจำเพาะห้ามไม่ให้แสดงความคิดเห็น ทำให้ไม่สะดวกสำหรับการกำหนดค่าที่แก้ไขด้วยมือ — ใช้ YAML หรือ JSON5 หากคุณต้องการความคิดเห็น หรือใช้ XML กับเอกสารประกอบสคีมา
- XML คุณลักษณะเทียบกับความกำกวมขององค์ประกอบ: XML สามารถแสดงข้อมูลเป็นแอตทริบิวต์หรือองค์ประกอบลูกโดยไม่มีกฎที่ชัดเจน นำไปสู่โมเดลที่ไม่สอดคล้องกัน - กำหนดแบบแผนหรือใช้ JSON ซึ่งมีคู่คีย์-ค่าเท่านั้น
- การชนกันของเนมสเปซใน XML: XML เนมสเปซมีความซับซ้อนและมักใช้ผิด ทำให้เกิดความล้มเหลวในการแยกวิเคราะห์ - JSON ไม่มีเนมสเปซ ซึ่งทำให้การแลกเปลี่ยนข้อมูลง่ายขึ้นโดยมีค่าใช้จ่ายในการขยาย
เคล็ดลับ
- ค่าเริ่มต้นเป็น JSON สำหรับ APIs ใหม่ การกำหนดค่า และการแลกเปลี่ยนข้อมูล ซึ่งเป็นมาตรฐานเว็บสมัยใหม่และแยกวิเคราะห์ได้ในทุกเบราว์เซอร์ผ่าน JSON.parse
- ใช้ XML เมื่อคุณต้องการแอตทริบิวต์ เนื้อหาแบบผสม เนมสเปซ หรือการตรวจสอบความถูกต้องของสคีมา (XSD) เท่านั้น — โดยทั่วไปใน SOAP ขององค์กร, SVG และรูปแบบเอกสารสำนักงาน
- ตรวจสอบ JSON ของคุณด้วย linter ก่อนที่จะส่งไปยังการใช้งานจริง - เครื่องหมายจุลภาคต่อท้ายหรือคีย์ที่ไม่มีเครื่องหมายคำพูดจะทำให้ JSON.parse เสียหาย
- เมื่อแปลง XML เป็น JSON ให้ตัดสินใจล่วงหน้าว่าจะจัดการแอตทริบิวต์อย่างไรกับองค์ประกอบลูก — ตัวแปลงส่วนใหญ่ใช้รูปแบบเช่น @attr สำหรับแอตทริบิวต์และ #text สำหรับเนื้อหาแบบผสม