ฉันคิดว่า XML นั้นมีความคล่องตัวสูงและสามารถใช้เป็นฐานข้อมูลขนาดเล็กได้ ฉันเคยเห็น XML ใช้ทุกที่ ฉันได้เห็น บริษัท ขนาดใหญ่เปลี่ยนไปJSON แม้แต่ Microsoft ก็มีการรองรับ JSON hype ทั้งหมดเหนือ JSON คืออะไร
ฉันคิดว่า XML นั้นมีความคล่องตัวสูงและสามารถใช้เป็นฐานข้อมูลขนาดเล็กได้ ฉันเคยเห็น XML ใช้ทุกที่ ฉันได้เห็น บริษัท ขนาดใหญ่เปลี่ยนไปJSON แม้แต่ Microsoft ก็มีการรองรับ JSON hype ทั้งหมดเหนือ JSON คืออะไร
คำตอบ:
โดยพื้นฐานแล้วเนื่องจาก JSON ได้รับการยอมรับโดย JavaScript โดยทั่วไปแล้วมันมีน้ำหนักเบาเรียบง่ายและพกพาได้สูงเพราะอาศัยเพียงโครงสร้างพื้นฐานสองประการเท่านั้น:
XML ไม่เริ่มส่องแสงจนกว่าคุณจะเริ่มผสม schema ที่มีเนมสเปซต่างกันเข้าด้วยกัน จากนั้นคุณจะเห็น JSON เริ่มล้มลง แต่ถ้าคุณต้องการรูปแบบการทำให้เป็นอนุกรมสำหรับข้อมูลของคุณ JSON นั้นมีขนาดเล็กลงเบาขึ้นอ่านได้ง่ายกว่ามนุษย์ทั่วไปและเร็วกว่า XML
ฉันพบว่าประโยชน์ใหญ่ของ JSON ผ่าน XML คือฉันไม่ต้องตัดสินใจว่าจะจัดรูปแบบข้อมูลอย่างไร ดังที่บางคนได้แสดงมีหลายวิธีในการทำโครงสร้างข้อมูลอย่างง่าย ๆ ใน XML - เช่นองค์ประกอบ, เป็นค่าแอตทริบิวต์, ฯลฯ จากนั้นคุณต้องจัดทำเอกสารเขียน XML Schema หรือ Relax NG หรืออึ ... ความยุ่งเหยิง
XML อาจมีข้อดี แต่สำหรับการแลกเปลี่ยนข้อมูลพื้นฐาน JSON มีขนาดกะทัดรัดและตรงกว่ามากขึ้น ในฐานะนักพัฒนา Python ไม่มีความต้านทานที่ไม่ตรงกันระหว่างชนิดข้อมูลอย่างง่ายใน JSON และ Python ดังนั้นถ้าฉันเขียน handler ฝั่งเซิร์ฟเวอร์สำหรับการค้นหา AJAX ที่ถามเกี่ยวกับสภาพหิมะสำหรับสกีรีสอร์ทโดยเฉพาะฉันจะสร้างพจนานุกรมดังนี้:
conditions = {
'new_snow_24': 5.0,
'new_snow_48': 8.5,
'base_depth': 88.0,
'comments': 'Deep and steep!',
'chains_required': True,
}
return simplejson.dumps(conditions) # Encode and dump `conditions` as a JSON string
เมื่อทำการแปลผ่าน JSON (โดยใช้ไลบรารีอย่าง 'simplejson' สำหรับ Python) โครงสร้าง JSON ที่ได้จะมีลักษณะใกล้เคียงกันเกือบทั้งหมด (ยกเว้นใน JSON, booleans จะต่ำกว่า)
การถอดรหัสโครงสร้างนั้นต้องการตัวแยกวิเคราะห์ JSON เท่านั้นไม่ว่าจะเป็น Javascript หรือ Objective-C สำหรับแอป iPhone ดั้งเดิมหรือ C # หรือไคลเอนต์ Python ทุ่นลอยนั้นจะถูกตีความว่าเป็นทุ่นสายเป็นสตริและบูลส์เหมือนบูลีน การใช้ไลบรารี่ 'simplejson' ใน Python simplejson.loads(some_json_string)
คำสั่งจะให้โครงสร้างข้อมูลแบบเต็มเหมือนกับที่ฉันทำในตัวอย่างด้านบน
ถ้าฉันเขียน XML ฉันต้องตัดสินใจว่าจะทำองค์ประกอบหรือคุณสมบัติ ทั้งสองอย่างต่อไปนี้ถูกต้อง:
<conditions>
<new-snow-24>5</new-snow-24>
<new-snow-48>8.5</new-snow-48>
<chains-required>yes</chains-required>
<comments>deep and steep!</comments>
</conditions>
<conditions newSnow24="5" newSnow48="8.5" chainsRequired="yes">
<comments>deep and steep!</comments>
</conditions>
ดังนั้นไม่เพียง แต่ฉันต้องคิดเกี่ยวกับข้อมูลที่ฉันอาจต้องการส่งถึงลูกค้าฉันต้องคิดเกี่ยวกับวิธีจัดรูปแบบ XML ในขณะที่ง่ายกว่า SGML ธรรมดาโดยเข้มงวดกับกฎของมันมากขึ้น แต่ก็ยังมีวิธีคิดมากมายเกี่ยวกับข้อมูลนั้น จากนั้นฉันจะต้องสร้างมันขึ้นมา ฉันไม่สามารถใช้พจนานุกรม Python (หรือโครงสร้างข้อมูลอย่างง่ายอื่น ๆ ) และพูดว่า "ไปทำให้ตัวเองเป็น XML ของฉัน" ฉันไม่สามารถรับเอกสาร XML และพูดทันทีว่า "ไปทำให้ตัวเองเป็นวัตถุและโครงสร้างข้อมูล" โดยไม่ต้องเขียนโปรแกรมวิเคราะห์คำที่กำหนดเองหรือไม่ต้องการค่าใช้จ่ายเพิ่มเติมของ XML Schema / Relax NG และความเจ็บปวดอื่น ๆ
สิ่งที่สั้นคือมันง่ายกว่าและตรงกว่าในการเข้ารหัสและถอดรหัสข้อมูลไปยัง JSON โดยเฉพาะอย่างยิ่งสำหรับการแลกเปลี่ยนอย่างรวดเร็ว สิ่งนี้อาจนำไปใช้กับผู้ที่มาจากพื้นหลังภาษาแบบไดนามิกเป็นชนิดข้อมูลพื้นฐาน (รายการพจนานุกรม ฯลฯ ) ที่สร้างขึ้นใน JavaScript / JSON แมปโดยตรงกับประเภทข้อมูลเดียวกันหรือคล้ายกันใน Python, Perl, Ruby ฯลฯ
ประสิทธิภาพของ JSON นั้นไม่แตกต่างจาก XML มากนักสำหรับกรณีการใช้งานส่วนใหญ่ JSON นั้นไม่เหมาะและสามารถอ่านได้สำหรับโครงสร้างรังแบบลึก ... คุณจะพบกับ]]]}}] ซึ่งทำให้การดีบักยาก
มันเบาเมื่อเทียบกับ XML หากคุณต้องการปรับขนาดลดความต้องการแบนด์วิดท์ของคุณ!
เปรียบเทียบ JSON
[
{
color: "red",
value: "#f00"
},
{
color: "green",
value: "#0f0"
},
{
color: "blue",
value: "#00f"
},
{
color: "cyan",
value: "#0ff"
},
{
color: "magenta",
value: "#f0f"
},
{
color: "yellow",
value: "#ff0"
},
{
color: "black",
value: "#000"
}
]
เป็น XML:
<colors>
<color >
<name>red</name>
<value>#f00</value>
</color>
<color >
<name>green</name>
<value>#0f0</value>
</color>
<color >
<name>blue</name>
<value>#00f</value>
</color>
<color >
<name>cyan</name>
<value>#0ff</value>
</color>
<color >
<name>magenta</name>
<value>#f0f</value>
</color>
<color >
<name>yellow</name>
<value>#ff0</value>
</color>
<color >
<name>black</name>
<value>#000</value>
</color>
</colors>
แค่เกร็ดเล็กเกร็ดน้อยจากประสบการณ์ส่วนตัวของฉัน:
ฉันเขียนไดเรกทอรี Javascript ขนาดเล็กก่อนอื่นด้วยข้อมูลใน XML แล้วปรับใช้ JSON เพื่อให้สามารถเรียกใช้แบบเทียบเคียงกันและเปรียบเทียบความเร็วกับ Firebug JSON สิ้นสุดลงเร็วกว่าประมาณ 3 เท่า (350-400 ms เทียบกับ 1200-1300 ms เพื่อแสดงข้อมูลทั้งหมด) นอกจากนี้อย่างที่คนอื่น ๆ สังเกตเห็น JSON นั้นง่ายต่อการสังเกตและขนาดไฟล์ก็เล็กลง 25% เนื่องจากมาร์กอัปแบบลีน
<colors>
<color name='red' value='#f00'/>
<color name='green' value='#0f0'/>
<color name='blue' value='#00f'/>
<color name='cyan' value='#0ff'/>
<color name='magenta' value='#f0f'/>
<color name='yellow' value='#ff0'/>
<color name='black' value='#000'/>
</colors>
ด้วยคุณสมบัติ XML เป็นสิ่งที่ดี แต่ด้วยเหตุผลบางอย่าง XML ที่ทำเองโดยทั่วไปนั้นทำจากองค์ประกอบ 100% และน่าเกลียด
การใช้งานง่ายโดย JavaScript สามารถเป็นหนึ่งในเหตุผล ..
JSON นั้นดีที่สุดสำหรับการใช้งานข้อมูลในเว็บแอปพลิเคชันจากเว็บเซอร์วิสสำหรับขนาดและความสะดวกในการใช้งานโดยเฉพาะอย่างยิ่งเนื่องจากการสนับสนุนในตัวในJavaScript JavaScriptลองนึกภาพค่าโสหุ้ยการคำนวณสำหรับการแยกวิเคราะห์ส่วน xml เปรียบเทียบกับการค้นหาทันทีใน JSON
ตัวอย่างที่ดีมากคือ JSON-P คุณสามารถรับข้อมูลกลับจากเว็บเซอร์ที่รวมอยู่ในการเรียกฟังก์ชันการโทรกลับเช่นmy_callback({"color": "blue", "shape":"square"});
ภายใน<script>
แท็กที่สร้างขึ้นแบบไดนามิกเพื่อให้สามารถใช้ข้อมูลในฟังก์ชันmy_callback()
ได้โดยตรง ไม่มีวิธีใดที่จะใกล้เคียงกับความสะดวกสบายนี้ด้วยการใช้ XML
XML เป็นรูปแบบของตัวเลือกสำหรับเอกสารขนาดใหญ่ที่คุณมีกรอบการแสดงผลหน้าข้อมูลในหลายรูปแบบโดยใช้ XSLT XML สามารถใช้กับไฟล์การกำหนดค่าแอปพลิเคชันเพื่อให้สามารถอ่านได้ในการใช้งานอื่น ๆ
ไม่มีใครพูดถึงข้อดีหลักของ XML: กฎการตรวจสอบ (DTD, XSD) ข้อสรุปของฉันหลังจากใช้ทั้งสอง:
แน่นอนว่ามีการพัฒนา json-schema แต่คุณจะไม่พบการสนับสนุนในตัวจากทุกที่
ฉันเป็นแฟนบอยของทั้งคู่พวกเขามีจุดแข็งที่แตกต่างกัน
ตอนนี้มีตัวเข้ารหัสและถอดรหัส JSON สำหรับภาษาส่วนใหญ่ไม่มีเหตุผลที่จะไม่ใช้ JSON สำหรับการใช้งานที่เหมาะสม (และนั่นอาจเป็น 90% ของกรณีการใช้งานสำหรับ XML)
ฉันเคยได้ยินว่ามีการใช้สตริง JSON ในฐานข้อมูล SQL ขนาดใหญ่เพื่อให้การเปลี่ยนแปลงสคีมาง่ายขึ้น
ค่อนข้างตรงไปตรงมามีไม่มากที่แตกต่างระหว่าง JSON และ XML ในความจริงที่ว่าพวกเขาสามารถเป็นตัวแทนของข้อมูลทุกประเภท อย่างไรก็ตาม XML นั้นมีขนาดใหญ่กว่า JSON และทำให้หนักกว่า JSON
JSON ไม่มีอิมพิแดนซ์ - ไม่ตรงกันกับการเขียนโปรแกรม JavaScript JSON สามารถมีจำนวนเต็มสตริงรายการอาร์เรย์ XML เป็นเพียงองค์ประกอบและโหนดที่จำเป็นต้องแยกวิเคราะห์เป็นจำนวนเต็มเป็นต้นก่อนที่จะสามารถใช้งานได้
ทั้งดีและพกพามาก อย่างไรก็ตาม JSON ได้รับความนิยมเนื่องจากมันทำให้อนุกรมเป็นตัวอักษรน้อยลงในกรณีส่วนใหญ่ (ซึ่งแปลเป็นเวลาการส่งมอบที่เร็วขึ้น) และเนื่องจากมันตรงกับไวยากรณ์วัตถุ JavaScript จึงสามารถแปลโดยตรงในวัตถุในหน่วยความจำซึ่งทำให้Ajaxง่ายขึ้นมาก การดำเนินการ
XML ยังคงยอดเยี่ยม JSON เป็นเพียง "ล่าสุดและยิ่งใหญ่ที่สุด" เปรียบเทียบกับ XML
แยกวิเคราะห์ได้ง่ายด้วย JavaScript และมีน้ำหนักเบา (เอกสารใน JSON มีขนาดเล็กกว่าเอกสาร XML ที่มีข้อมูลเดียวกัน)
JSON เป็นจาวาสคริปต์ต่อเนื่องที่มีประสิทธิภาพซึ่งคุณสามารถ eval (aJsonString) ได้โดยตรงในวัตถุ JavaScript ภายในเบราว์เซอร์ JSON ที่ไม่ต้องใช้สมองเหมาะสำหรับ JavaScript อย่างสมบูรณ์แบบ ในเวลาเดียวกัน JavaScript เป็นภาษาไดนามิกที่พิมพ์อย่างอิสระและไม่สามารถใช้ประโยชน์จากข้อมูลประเภทเฉพาะทั้งหมดที่มีอยู่ภายในเอกสาร Xml / Xsd ได้ ข้อมูลเมตาเพิ่มเติมนี้ (ซึ่งยอดเยี่ยมสำหรับการใช้งานร่วมกันได้) เป็นอุปสรรคใน JavaScript ทำให้น่าเบื่อและน่าเบื่อกว่าที่จะทำงานด้วย
ขนาดเทียบกับประสิทธิภาพ
หากคุณอยู่ในเบราว์เซอร์ JSON จะเร็วกว่าในการทำให้เป็นอนุกรม / ไม่ดีซีเรียลไลซ์เพราะมันง่ายกว่ากะทัดรัดและได้รับการสนับสนุนที่สำคัญกว่า ฉันมีเกณฑ์มาตรฐานฐานข้อมูลนอร์ทวินด์บางตัวเปรียบเทียบขนาดและความเร็วระหว่างซีเรียลไลเซอร์ที่แตกต่างกัน ในไลบรารีคลาสฐานข้อมูล XML DataContract serializer ของ Microsoft นั้นเร็วกว่า JSON ของพวกเขามากกว่า30% แม้ว่าสิ่งนี้จะเกี่ยวข้องกับความพยายามของ Microsoft ในการทำให้ XML serializer เป็นเรื่องที่ฉันสามารถพัฒนาJsonSerializerที่เร็วกว่า2.6 เท่ามากกว่า XML หนึ่งเท่า สำหรับเพย์โหลดตามมาตรฐานดูเหมือนว่า XML นั้นมากกว่า 2 เท่าขนาดของ JSON อย่างไรก็ตามสิ่งนี้สามารถระเบิดได้อย่างรวดเร็วหากส่วนของข้อมูล XML ของคุณใช้เนมสเปซที่แตกต่างกันจำนวนมากภายในเอกสารเดียวกัน
XML เป็นน้ำมันงูป่องในสถานการณ์ส่วนใหญ่ JSON ให้ประโยชน์สูงสุดแก่คุณโดยไม่มีการขยายตัว
ข้อดีอย่างหนึ่งที่สำคัญนอกเหนือจากที่กล่าวถึงที่นี่ สำหรับข้อมูลเดียวกันมีหลายวิธีในการแสดงว่าเป็นไฟล์ XML แต่มีเพียงวิธีเดียวด้วย JSON ลบความกำกวม :)
{"colors":["red","green","blue"],"systems":["windows","mac"]}
กับ{"entries":[{"type":"color","value":"red"},{"type":"system","value":"mac"}]}
ฉันไม่ชำนาญ แต่จากหลาย บริษัท ที่ฉันทำงานให้กับเราโดยทั่วไปใช้ XML ในสภาพแวดล้อมข้อมูลขนาดเล็กหรือค่าการกำหนดค่า (web.config เป็นตัวอย่างที่ดี)
เมื่อคุณมีข้อมูลจำนวนมากโดยทั่วไปคุณจะต้องรายงานข้อมูลนั้น และ XML ไม่ใช่แหล่งที่ดีสำหรับการรายงาน ในรูปแบบที่ยิ่งใหญ่ของสิ่งต่าง ๆ ดูเหมือนว่าฐานข้อมูลธุรกรรมจะง่ายต่อการรายงาน / ค้นหามากกว่า XML
มันสมเหตุสมผลหรือไม่ ดังที่ฉันได้กล่าวไว้ข้างต้นฉันไม่มีความเชี่ยวชาญ แต่จากประสบการณ์ของฉันสิ่งนี้น่าจะเป็นจริง นอกจากนี้ฉันเชื่อว่าการสนับสนุน JSON ของ Microsoft แบบบูรณาการเนื่องจากคลื่นของนักพัฒนาที่ย้ายไปยังฝั่งไคลเอ็นต์หรือการกระทำที่เขียนสคริปต์เพื่อปรับปรุงภาพของ UI ( Ajax ) และ Ajax ของ Microsoft ไม่ได้ถูกใช้งานมากเท่ากับไลบรารีอื่น ๆ เช่น jQuery และMooTools ( YUIของ Yahooยังอยู่ในส่วนผสมนั้น) เนื่องจากการรวมที่สวยงามของวัตถุที่ต่อเนื่องกันได้โดยใช้ JSON
ฉันพบว่าตัวเองกำลังเขียนรหัสในขณะนี้ใช้ JSON serializer ในรหัส VB ของฉัน มันเป็นวิธีที่ง่ายเกินไปและจากจุดยืนในการอัพเกรด / แก้ไขคุณไม่สามารถเอาชนะได้ เป็นวิธีของ Microsoft ที่ทำให้เราติด VS ฉันเดา ฉันเพิ่งแปลงแอปพลิเคชันองค์กรเป็นใช้ Ajax (ผ่าน jQuery) และใช้รูปแบบ JSON ใช้เวลาประมาณ 2 สัปดาห์ในการทำเช่นนั้น ฉันขอบคุณ Microsoft จริง ๆ ที่รวมเข้าด้วยกันเพราะถ้าไม่มีฉันจะต้องเขียนโค้ดเพิ่มเติมสักหน่อย