เราสามารถแทนที่ XML ด้วย JSON ได้ทั้งหมดหรือไม่ [ปิด]


78

ฉันแน่ใจว่านักพัฒนาจำนวนมากคุ้นเคยกับXMLและJSONและพวกเขาใช้ทั้งคู่ ดังนั้นจึงไม่มีประเด็นในการอธิบายว่าพวกเขาคืออะไรและอะไรคือจุดประสงค์ของพวกเขาแม้โดยสังเขป

หากเราพยายามทำแผนที่แนวคิดของพวกเขาเราสามารถพูดได้ (แก้ไขให้ฉันถ้าฉันผิด):

  1. แท็ก XML เทียบเท่ากับ JSON {}
  2. แอตทริบิวต์ XML เทียบเท่ากับคุณสมบัติ JSON
  3. การรวบรวมแท็ก XML เทียบเท่ากับ JSON []

สิ่งเดียวที่ฉันสามารถคิดซึ่งไม่ได้อยู่ใน JSON เป็นNamespaces XML

คำถามคือเมื่อพิจารณาการทำแผนที่นี้และการพิจารณาว่า JSON นั้นมีน้ำหนักเบามากในการทำแผนที่นี้เราสามารถมองเห็นโลกในอนาคต (หรืออย่างน้อยก็ในความคิดทางทฤษฎีเกี่ยวกับโลก) โดยปราศจาก XML แต่ JSON ทำทุกอย่าง เราสามารถใช้ JSON ได้ทุกที่ที่ใช้ XML หรือไม่

PS: โปรดทราบว่าผมเคยเห็นนี้คำถาม มันเป็นสิ่งที่แตกต่างอย่างสิ้นเชิงจากสิ่งที่ฉันถามที่นี่ ดังนั้นโปรดอย่าพูดถึงที่ซ้ำกัน


14
เราสามารถ (และควร) แทนที่สิ่งที่ออกแบบมาอย่างล้นหลามด้วย S-expressions ได้อย่างชัดเจน โลกที่ปราศจาก XML จะเป็นสถานที่ที่ดีกว่ามาก แต่น่าเสียดายที่ไม่มีอะไรนอกจากความคิดนึกอยาก
SK-logic

19
ฮึ. ฉันเกลียดคำถามเหล่านี้ ฉันคิดว่านี่เป็นกรณีสำหรับการใช้เครื่องมือที่เหมาะสมสำหรับงานและไม่ใช่ว่าจะสามารถใช้แทนเครื่องมืออื่นได้ทั้งหมด โลกมีข้อ จำกัด อยู่น้อยมากแม้กระทั่งกับคอมพิวเตอร์ ฉันนึกภาพไม่ออกเลยว่าฉันจะทำสิ่งใดกับ JSON อย่างน้อยก็ในตอนนี้ที่เทคโนโลยีนั้นเกี่ยวข้อง
ฟิลิปรีแกน

2
@ ฟิลิปนี่ไม่ใช่คำถามที่จะทำลายบางสิ่งบางอย่าง มันแค่พยายามดูว่า JSON ขาดอะไรเพื่อให้เราสามารถปรับปรุงได้ :)
Saeed Neamati

4
การอภิปรายเกี่ยวกับความแตกต่างระหว่างเทคโนโลยีสองอย่างเพื่อดูว่าสามารถทำการปรับปรุงได้ที่ไหนดีกว่าการถามว่าสามารถแทนที่ด้วยเทคโนโลยีอื่นได้หรือไม่ อดีตมีการทบทวนทางวิชาการมากกว่าบทหลังซึ่งฟังดูเป็นปฏิปักษ์กับความคับข้องใจมากกว่าสิ่งใด
Philip Regan

12
นี่ไม่ใช่สมมุติ JSON ดูเหมือนจะไม่มีคุณสมบัติที่ XML มีอยู่
S.Lott

คำตอบ:


153

สิ่งที่ทำให้ XML มีพลังและความซับซ้อนมากมายนั้นคือเนื้อหาที่ผสมกัน สิ่งนี้:

<p>A <b>fine</b> mess we're in!</p>

อย่าพยายามทำสิ่งนั้นใน JSON หรือจัดการมันในภาษาโปรแกรมทั่วไป พวกเขาไม่ได้ออกแบบมาสำหรับงาน

คำถามแบบนี้มักมาจากคนที่ลืมว่า M ใน XML หมายถึงมาร์กอัป เป็นวิธีการป้อนข้อความธรรมดาและเพิ่มมาร์กอัพเพื่อสร้างข้อความที่มีโครงสร้าง มันค่อนข้างมีประโยชน์สำหรับข้อมูลที่ล้าสมัยเช่นกัน แต่นั่นไม่ใช่สิ่งที่มันถูกออกแบบมาสำหรับจุดแข็งหลัก มีวิธีมากมายในการจัดการข้อมูลอย่างง่ายและ JSON เป็นหนึ่งในนั้น


33
+1: นี่คือคุณสมบัติที่แตกต่าง จุดที่ดีเยี่ยม
S.Lott

7
@Michael คุณเพิ่งสอนสิ่งที่มีค่า นี่คือคำตอบที่ดี +1
Saeed Neamati

9
.... มี 3 โหนดอินดี้ P, A องค์ประกอบ B และ `เรายุ่งอยู่! ' มันเป็นอาร์เรย์ซึ่งคุณสามารถอธิบายได้ง่ายๆใน JSON
ไม่ระบุตัวตน

5
@Rob ไม่ แต่ฉันอธิบายว่าคุณสามารถกำหนดสิ่งต่าง ๆ ที่แสดงโดย HTML ในความชัดเจนมากขึ้นและอาจเร็วกว่าการแยกวิเคราะห์ผ่าน JSON (เนื่องจากการแยกข้อความน้อยลงจำเป็นต้องค้นหาโหนดประเภทต่าง ๆ ) หาก HTML เป็น JSON-ML เราอาจมี devs จำนวนมากที่เข้าใจ DOM, โหนดข้อความและการโยง
ไม่ระบุตัวตน

5
@ByrneReese: ใช่มันเป็น XML และใช่มันถูกต้อง นั่นคือ HTML ที่อยู่ด้านข้าง ในความเป็นจริง XHTML ยังเป็น XML ที่ถูกต้อง :-)
Martijn

31

ฉันคิดว่าความแตกต่างที่สำคัญคือในความจริงที่ว่า XML ถูกออกแบบมาเพื่ออธิบายตนเองด้วย dtd และทุกสิ่ง

ด้วย JSON คุณต้องถือว่าข้อมูลจำนวนมากที่คุณได้รับ


7
"XML ถูกออกแบบมาเพื่ออธิบายตนเอง" คุณสามารถให้ลิงค์หรือการอ้างอิงสำหรับสิ่งนี้ได้หรือไม่? ฉันไม่เห็นในมาตรฐาน W3C สำหรับ XML และฉันสงสัยว่าแนวคิดนี้มาจากไหน ฉันดูเหมือนตำนานเมืองมากกว่าเป้าหมายการออกแบบที่ระบุไว้
S.Lott

6
@ S.Lott: ฉันคิดว่าสิ่งที่เขาหมายถึงคือลักษณะของแท็ก XML ในตัวของมันเองและอนุญาตให้เนื้อหาที่ติดแท็กอธิบายตนเองได้กล่าวคือ DTD นั้นเป็นตัวเลือกดังนั้น XML ที่มีรูปแบบที่ดีสามารถแยกวิเคราะห์ได้โดยไม่มีใคร แต่ฉันเห็นด้วยกับปัญหาของคุณเพราะในทางเทคนิคแล้ว JSON มีความสามารถเหมือนกันดังนั้นฉันไม่เห็นคำอธิบายของตัวเองว่าเป็นความแตกต่างที่สำคัญเลย (ฉันไม่แน่ใจว่าทำไมเรื่องนี้ถึงได้รับการโหวต) แต่ Michael Kay เป็นสัญลักษณ์เพิ่มเติม
Philip Regan

5
@ S.Lott เห็นด้วย ฉันต้องบอกว่า JSON ที่นี่json.org/example.htmlง่ายต่อการเข้าใจและจัดทำเอกสารด้วยตนเองได้ดีกว่า XML ที่เกี่ยวข้องเนื่องจากไม่มีการใช้คำฟุ่มเฟื่อย
Doug T.

4
@Michael Borgwardt: หากไม่มีแท็ก XSD แบบเต็ม (รวมถึงการสนับสนุนด้านอภิปรัชญาบางอย่าง) ชื่อไม่บอกอะไรเลย "ความหมาย" นั้นยากที่จะทำให้สำเร็จโดยทั่วไป นั่นทำให้ฉันไม่ชัดเจนในสิ่งที่ "การอธิบายตนเอง" ควรจะมีความหมายในคำตอบ และฉันไม่มีหลักฐานว่ามันเป็นเป้าหมายการออกแบบสำหรับ XML
S.Lott

4
@Philip Regan: เช่นเดียวกับ "รหัสอธิบายตนเอง" ดูเหมือนจะไม่ใช่คุณลักษณะของ XML หากเป็นเพียงวัตถุประสงค์การใช้งานสากลที่ใช้กับทุกภาษาซอฟต์แวร์ (รหัสการเข้าถึงข้อมูลมาร์กอัปสิ่งใดก็ตาม) บางทีผู้คนไม่ควรพูดถึง XML โดยเฉพาะ
S.Lott

21

การแปลตามตัวอักษรของ JSON มักสั้นกระชับและชัดเจนน้อยกว่า พิจารณา:

<foo>
   <x:bar x:prop1="g">
      <quuz />
   </bar>
</foo>

การนำเสนอ JSON ที่มีประสิทธิภาพที่สุดที่ฉันได้เห็น:

{"localName":"foo",
 "children": // you need to have a special array to hold all children
 [
    {"localName": "bar",
     "namespace": "x"
        // once again, to ensure that there are no collisions,
        // attributes should be brought out into their own JSON structure 
        "attributes":[
            {"localName":"prop1",
             "namespace":"x",
             "value":"g"}
        ],
         "children":[
             {"name":"quux"}
         ]
     }
 ]}

ทีนี้ลองจินตนาการว่าสำหรับไฟล์ XML ทั้งหมด ฉันไม่ได้บอกว่า JSON ไม่มีที่อยู่ แต่ไม่ควรตัดออกจาก XML


8
พิจารณา SXML:(foo (x:bar (@ (x:prop1 "g")) (quuz)))
SK-logic

2
@ SK-Logic: เป็นเรื่องที่ยอดเยี่ยมสำหรับตัวอย่างเล็ก ๆ น้อย ๆ แต่ฉันไม่สามารถจินตนาการได้ว่าทำเนื้อหาที่ผสมซ้อนกันอย่างลึกล้ำ - เช่นหนังสือ - กับสิ่งนั้น ฉันคิดว่า SXML นั้นเป็นแบบฝึกหัดทางวิชาการมากเท่ากับอะไร
ฟิลิปรีแกน

3
@Philip Regan: การเขียน S-Exp ให้หนักขึ้นแล้วใช้ chevronitis อย่างไรเมื่อการแปลง 1: 1 เล็กน้อยกลายเป็นรูปแบบ verbose ที่น้อยกว่า
maaartinus

@ maartinus: สาขาความเชี่ยวชาญของฉันอยู่ในการจัดพิมพ์หนังสือ: ตำราทุกชนิดเป็นสัตว์ที่มีความซับซ้อนและลึกล้ำที่มีเนื้อหาหลากหลายที่ต้องมีการจัดการที่ชัดเจน DocBook และ DITA สามารถอ่านได้มากกว่าตัวอย่างที่ให้ไว้ด้านบน
Philip Regan

1
@Philip Regan, SXML นั้นง่ายมากที่จะแก้ไขซึ่งแตกต่างจาก XML และแน่นอนว่ามันเป็นตัวเลือกที่ดีกว่ามากสำหรับโปรโตคอลโดยไม่ต้องพูดถึงความเหนือกว่าของการใช้เครื่องมือที่มีอยู่
SK-logic

14

JSON และ XML เป็นทั้งวิธีการจัดรูปแบบข้อมูล ทั้งสองมีความสามารถในการทำมันได้อย่างสมบูรณ์แบบ JSON สามารถทำทุกอย่างเพื่อ XML ได้หรือไม่ ใช่.

แต่ ..... คำถามที่เกี่ยวข้องเพิ่มเติมอาจไม่ใช่สิ่งที่ XML / JSON สามารถทำได้ แต่จะทำอย่างไรกับ XML / JSON

มีหลายสิ่งที่คุณสามารถทำได้กับ XML ที่ฉันไม่คิดว่าคุณสามารถทำได้ด้วย JSON เช่นแปลด้วย XLST, ค้นหาด้วย XPath และตรวจสอบกับ schema ทุกอย่างมีประโยชน์มาก


5
ยกเว้นเนื้อหาแบบผสมที่ข้อมูลมีแท็ก JSON ทำสิ่งนั้นไม่ดีเลย
S.Lott

11

มีฟังก์ชันการทำงานมากมายโดยใช้XSLTที่อาจไม่สามารถทำได้ด้วย JSON ดังนั้นหากพวกเขาไม่สามารถทำงานได้เทียบเท่าพวกเขาไม่สามารถแทนที่กัน


3
ที่กล่าวว่าคุณสามารถใช้ภาษาอื่นในการ deserialise จัดการและซีเรียล JSON และ XSLT ไม่ใช่ XML ดังนั้นจุดนี้จึงเป็นที่สงสัย
StuperUser

3
XSLT เป็น XML - ดูสคีมาที่นี่
treecoder

ขอบคุณ @greengit ฉันมีเพียงช่วงเวลาสั้น ๆ เปิดเผยปรับปรุงคำตอบ
StuperUser

2
@StuperUser: มันเป็นไปไม่ได้ "กับ JSON ได้อย่างไร? มันเป็นเพียงการเปลี่ยนแปลงบางทีเครื่องมืออาจหายไป หรือปัญหาที่เกี่ยวข้องกับการขาดคุณสมบัติใน JSON หรือไม่
maaartinus

1
@StuperUser: XSLT เป็นภาษา (ส่วนย่อยของ XML) ซึ่งมีล่ามบางตัวเขียนเป็นภาษาอื่นอย่างน้อยหนึ่งภาษา (อาจเป็นภาษา C, Java, ... ) สิ่งเดียวกันสามารถทำได้สำหรับ JSON (กำหนด JSON-T บางตัวเขียนตัวบุกรุก) ใช่ไหม?
maaartinus

8

ความจริงก็คือเราจะต้องอยู่กับทั้งคู่เป็นเวลานานและการเป็นคนสำคัญของ JSON ก็คือ "ถือว่าเป็นอันตราย"


7

JSON นั้นค่อนข้างใหม่และระบบเดิมไม่รองรับ การอัพเกรดระบบเดิมนั้นมีราคาแพงและแนะนำบั๊ก JSON จะไม่แทนที่ XML ในอนาคตอันใกล้


2
ขอบคุณสำหรับการตอบกลับของคุณ. สิ่งที่ฉันมีอยู่ในใจคือการทบทวนทางเทคนิคมากกว่ากลยุทธ์การปรับใช้ ฉันต้องการทราบเช่นสำหรับเวอร์ชันใหม่ของระบบเดิมเหล่านั้นเราสามารถปล่อย XML ทั้งหมดและใช้ JSON ได้หรือไม่ ถ้าไม่เราพลาดอะไรใน JSON
Saeed Neamati

ในทางกลับกันฉันไม่ได้ใช้ XML เพียงแค่ JSON ในช่วงไม่กี่ปีที่ผ่านมา และเป็นเจ้าระเบียบที่ดี แน่นอนว่า XML เป็นสิ่งที่น่าจดจำมากกว่า ซึ่งดีสำหรับความปลอดภัยของงานไม่ดีสำหรับประสิทธิภาพ
gnasher729

6

ฉันจะบอกว่า cwallenpoole เป็นจุดที่ยอดเยี่ยม ในขณะที่ XML ส่วนใหญ่สามารถแปลเป็น JSON ได้การทำเช่นนั้นดีกว่าหรือไม่เพราะเป็นจุดแยกต่างหาก

JSON ให้ยืมโครงสร้างข้อมูลอย่างน้อยก็เช่นเดียวกับ XML และอาจจะดีกว่า แต่ XML จะอ่านได้อย่างเป็นธรรมชาติมากกว่า JSON เมื่อทำเครื่องหมายเอกสารที่เป็นข้อความโดยที่แท็กจะถูกใช้ภายในการไหลของข้อความที่มีขนาดใหญ่ ของสาขา

แม้ว่า HTML 5 อาจมีโปรแกรมแยกวิเคราะห์ของตัวเอง แต่ก็ยังคงออกจากแอปพลิเคชันเช่น DocBook


JSON สามารถมีสตริงที่สามารถมี HTML ได้อย่างชัดเจน
gnasher729

6

มันขึ้นอยู่กับโดเมน ในแง่ของการบริการเว็บ? อย่างแน่นอน เป็นเรื่องน่าอายอย่างที่สุดที่ผู้ขายยังคงผลักดันสบู่ให้กับลูกค้าของพวกเขา REST + JSON ไปตลอดทาง

ทีนี้เมื่อคุณพูดถึงข้อมูลที่มีความซับซ้อนข้อมูลที่มีโครงสร้างพร้อมกับข้อมูลสไตล์เช่น Docbook หรือการนำไปใช้อื่น ๆ นั่นเป็นโดเมนที่เหมาะสมสำหรับ XML


4

ทำไมต้อง จำกัด ตัวเองกับ JSON เมื่อ YAML เป็นชุดสุดยอดและมีความหมายมากกว่าและมีประสิทธิภาพมากกว่า XML หรือ JSON

ที่กล่าวว่าหากคุณใช้เฟรมเวิร์กการทำให้เป็นอันดับที่ถูกต้องคุณควรจะสามารถทำให้เป็นอันดับและยกเลิกการทำให้เป็นอนุกรมทุกรูปแบบที่กล่าวถึงข้างต้นด้วยสองบรรทัดที่เรียบง่ายของรหัส


3

มันน่าเกลียดเมื่อคุณพยายามจำลองวัตถุทั้งสองนี้ใน JSON:

<customer><name>John Doe</name></customer>
<employee><name>John Doe</name</employee>

การใช้ JSON เป็นวิธีที่ใช้ในกรณี 99% ที่ได้รับ:

{ name: "John Doe" } 

และตอนนี้คุณต้องเพิ่มโครงสร้างเมตาดาต้าและความงามทั้งหมดของ JSON หายไปในขณะที่คุณถูกทิ้งให้อยู่ข้างล่าง


11
JSON เทียบเท่ากับ XML { customer: { name: 'John Doe' }, employee : { name: 'John Doe' } }ที่ให้บริการของคุณ ดังนั้นทางเทคนิคคำตอบของคุณไม่ถูกต้อง :)
Saeed Neamati

แน่นอนว่าสิ่งเดียวที่ขาดใน JSON คือคุณสมบัติและไม่มีประโยชน์สำหรับการสร้างแบบจำลองวัตถุ (ต่างจากมาร์กอัป) บางครั้งแอตทริบิวต์จะถูกใช้เป็นทางลัดสำหรับสิ่งที่สามารถแสดงโดยใช้ข้อมูลที่ซ้อนกัน (เช่นในไฟล์กำหนดค่า Hibernate) ซึ่งมีประโยชน์ แต่จริงๆแล้วการมีอยู่ของตัวเลือกทำให้ยากขึ้น ไฟล์กำหนดค่าและวัตถุการสร้างแบบจำลองมีสองแห่งที่ JSON เหนือกว่าอย่างชัดเจน
maaartinus

2
@SeedNeamati คุณจะสร้างแบบจำลอง<customer><name>John Doe</name></customer><customer><name>John Doe</name></customer>ใน JSON อย่างไร
svick

6
{ลูกค้า: [{ชื่อ: 'John Doe'}, {name: 'John Doe'}]}?
scrwtp

2
@Stijn - ถูกต้องและใช้งานได้ แต่ยืนยันความคิดเห็นจากคำตอบเดิมว่า "คุณต้องเพิ่มโครงสร้างเมตาดาต้า" เพื่อสร้างแบบจำลองบางสิ่งที่ตกอยู่ใน XML อย่างเป็นธรรมชาติมากขึ้น
Matt R

3

ฉันไม่ทราบว่ามีสิ่งอำนวยความสะดวกดังกล่าวสำหรับ JSON หรือไม่ แต่อย่างน้อยใน. NET คุณสามารถตรวจสอบ XML กับสคีมาที่กำหนดได้ นั่นเป็นข้อได้เปรียบที่มีคุณค่าของ XML ในสายตาของฉัน


2
json มีสกีมาเช่นกัน: json-schema.org
lordvlad
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.