Chúng ta có thể thay thế hoàn toàn XML bằng JSON không? [đóng cửa]


78

Tôi chắc chắn rất nhiều nhà phát triển đã quen thuộc với XMLJSON và họ đã sử dụng cả hai. Do đó, không có lý do nào để giải thích chúng là gì và mục đích của chúng là gì, thậm chí là ngắn gọn.

Nếu chúng ta cố gắng ánh xạ các khái niệm của họ, chúng ta có thể nói (sửa tôi nếu tôi sai):

  1. Các thẻ XML tương đương với JSON {}
  2. Các thuộc tính XML tương đương với các thuộc tính JSON
  3. Bộ sưu tập thẻ XML tương đương với JSON []

Điều duy nhất tôi có thể nghĩ, không tồn tại trong JSON, là Không gian tên XML .

Câu hỏi đặt ra là, khi xem xét ánh xạ này và xem xét rằng JSON rất nhẹ trong ánh xạ này, chúng ta có thể thấy một thế giới trong tương lai (hoặc ít nhất là về mặt lý thuyết nghĩ về một thế giới) không có XML, nhưng với JSON thì mọi thứ đều làm XML? Chúng ta có thể sử dụng JSON ở mọi nơi XML được sử dụng không?

PS: Xin lưu ý rằng tôi đã thấy câu hỏi này . Đó là một cái gì đó hoàn toàn khác với những gì tôi đang hỏi ở đây. Vì vậy, xin vui lòng không đề cập trùng lặp .


14
Rõ ràng, chúng ta có thể (và nên) thay thế tất cả những thứ được thiết kế không phù hợp bằng biểu thức S, rõ ràng. Thế giới không có XML thực sự sẽ là một nơi tốt hơn nhiều, nhưng thật không may, không có gì ngoài một suy nghĩ mơ ước.
SK-logic

19
Ừ Tôi ghê tởm những câu hỏi này. Tôi nghĩ rằng đây thực sự là một trường hợp sử dụng công cụ phù hợp cho công việc, và không phải là liệu người ta có thể thay thế hoàn toàn một công cụ khác hay không. Có rất ít điều tuyệt đối trên thế giới, ngay cả với máy tính. Tôi không thể tưởng tượng làm bất kỳ điều gì tôi làm với JSON, ít nhất là khi các công nghệ tương ứng hiện đang tồn tại.
Philip Regan

2
@Philip, đây không phải là một câu hỏi để phá hủy một cái gì đó. Nó chỉ cố gắng xem những gì JSON thiếu, để chúng tôi có thể cải thiện nó. :)
Saeed Neamati

4
Một cuộc thảo luận về sự khác biệt giữa hai công nghệ để xem nơi cải tiến có thể được thực hiện rất khác so với việc hỏi liệu cái này có thể được thay thế bằng cái kia hay không. Cái trước là đánh giá học thuật nhiều hơn cái sau nghe có vẻ đối nghịch với sự thất vọng hơn bất cứ điều gì
Philip Regan

12
Đây không phải là giả thuyết. JSON dường như thiếu một tính năng mà XML sở hữu.
S.Lott

Câu trả lời:


153

Thứ mang lại cho XML sức mạnh và rất nhiều sự phức tạp của nó là nội dung hỗn hợp. Những thứ như thế này:

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

Thậm chí đừng cố gắng làm điều đó trong JSON hoặc thao tác nó trong các ngôn ngữ lập trình thông thường. Họ không được thiết kế cho công việc.

Loại câu hỏi này thường xuất phát từ những người quên rằng M trong XML là viết tắt của đánh dấu. Đó là một cách lấy văn bản đơn giản và thêm đánh dấu để tạo văn bản có cấu trúc. Nó cũng khá tiện lợi cho dữ liệu lỗi thời, nhưng đó không phải là những gì nó được thiết kế cho hoặc nơi sức mạnh chính của nó nằm. Có rất nhiều cách xử lý dữ liệu đơn giản và JSON là một trong số đó.


33
+1: Đây là tính năng phân biệt. Điểm tuyệt vời.
S.Lott

7
@Michael, bạn vừa dạy tôi điều gì đó có giá trị. Đây là một câu trả lời tuyệt vời. +1.
Saeed Neamati

9
.... Có 3 nút độc lập của P, A phần tử B và `mess we in!`. Đó là một mảng, mà bạn có thể giải thích đơn giản bằng JSON.
Ẩn danh

5
@Rob Không, nhưng tôi đang giải thích rằng bạn có thể định nghĩa những điều được thể hiện bằng HTML rõ ràng hơn và có thể phân tích cú pháp nhanh hơn thông qua JSON (vì cần ít phân tích văn bản hơn để tìm các loại nút khác nhau). Nếu HTML là JSON-ML, chúng ta có thể có nhiều nhà phát triển thực sự hiểu DOM, nút văn bản và các ràng buộc.
Ẩn danh

5
@ByrneReese: có, đó là XML và có, nó hợp lệ. Đó cũng là HTML bên cạnh quan điểm; thực tế, XHTML cũng là XML hợp lệ. :-)
Martijn

31

Sự khác biệt chính, tôi nghĩ, là ở chỗ, XML được thiết kế để tự giải thích với dtd của nó và mọi thứ.

Với JSON, bạn phải thừa nhận rất nhiều về dữ liệu bạn đang nhận.


7
"XML được thiết kế để tự giải thích". Bạn có thể cung cấp một liên kết hoặc một tài liệu tham khảo cho điều này? Tôi không thấy nó trong các tiêu chuẩn W3C cho XML và tôi tự hỏi khái niệm này đến từ đâu. Tôi có vẻ như một huyền thoại đô thị hơn là một mục tiêu thiết kế đã nêu.
S.Lott

6
@ S.Lott: Tôi nghĩ rằng ý nghĩa của anh ấy là bản chất của các thẻ XML, cho phép, nội dung được gắn thẻ có thể tự giải thích, tức là, các DTD là tùy chọn để XML có thể được phân tích cú pháp mà không cần một. Nhưng tôi đồng ý với vấn đề của bạn về vấn đề này vì về mặt kỹ thuật, JSON có khả năng tương tự, vì vậy tôi không thấy tự giải thích là sự khác biệt chính cả (tôi không chắc tại sao điều này cứ tiếp tục được bình chọn), nhưng đúng hơn Michael Kay là nhiều hơn về nhãn hiệu.
Philip Regan

5
@ S.Lott đồng ý. Tôi phải nói rằng JSON ở đây json.org/example.html dễ hiểu hơn và tự ghi chép tốt hơn so với XML liên quan do thiếu tính chi tiết.
Doug T.

4
@Michael Borgwardt: Không có tên thẻ XSD đầy đủ (bao gồm một số loại hỗ trợ bản thể học) không cho tôi biết gì. "Có ý nghĩa" là khó thực hiện nói chung. Điều đó khiến tôi không rõ về "tự giải thích" nghĩa là gì trong câu trả lời. Và tôi không có bằng chứng rằng nó thậm chí là một mục tiêu thiết kế cho XML.
S.Lott

4
@Philip Regan: Cũng như "mã tự giải thích", dường như nó không phải là một tính năng của XML. Nếu đó chỉ là một mục tiêu triển khai phổ biến áp dụng cho tất cả các ngôn ngữ phần mềm (mã, truy cập dữ liệu, đánh dấu, bất cứ điều gì) thì có lẽ mọi người không nên đề cập cụ thể về XML.
S.Lott

21

Một bản dịch theo nghĩa đen sang JSON thường ít cô đọng và ít rõ ràng hơn. Xem xét:

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

Đại diện JSON hiệu quả nhất mà tôi đã thấy về điều này:

{"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"}
         ]
     }
 ]}

Bây giờ, hãy tưởng tượng rằng cho toàn bộ tệp XML. Tôi không nói rằng JSON không có vị trí của nó, nhưng không nên loại trừ XML.


8
Bây giờ hãy xem xét SXML:(foo (x:bar (@ (x:prop1 "g")) (quuz)))
SK-logic

2
@ SK-Logic: Thật tuyệt vời cho một ví dụ tầm thường, nhưng tôi không thể tưởng tượng được việc làm nội dung hỗn hợp, lồng ghép sâu sắc như một cuốn sách với điều đó. Tôi nghĩ SXML là một bài tập học thuật như bất cứ điều gì.
Philip Regan

3
@Philip Regan: Làm thế nào có thể viết S-Exp khó hơn khi sử dụng viêm chevron, khi đó là một biến đổi tầm thường 1: 1 thành dạng ít dài dòng hơn?
maaartinus

@maartinus: Lĩnh vực chuyên môn của tôi là trong xuất bản sách: sách giáo khoa thuộc bất kỳ loại nào đều là những con thú sâu sắc, phức tạp với một loạt nội dung đòi hỏi phải quản lý rõ ràng. DocBook và DITA dễ đọc hơn nhiều so với ví dụ nêu trên.
Philip Regan

1
@Philip Regan, SXML rất dễ chỉnh sửa, không giống như XML. Và tất nhiên nó là một lựa chọn tốt hơn cho các giao thức, không cần đề cập đến tính ưu việt của các công cụ có sẵn.
SK-logic

14

JSON và XML đều là cách định dạng dữ liệu. Cả hai đều có khả năng thực hiện nó hoàn hảo, vậy JSON có thể làm mọi thứ XML không? Đúng.

Nhưng ..... Một câu hỏi phù hợp hơn có thể không phải là những gì XML / JSON có thể làm, mà là, bạn có thể làm gì với XML / JSON.

Có một số điều bạn có thể làm với XML mà tôi không nghĩ là bạn có thể làm với JSON, chẳng hạn như dịch bằng XLST, tìm kiếm bằng XPath và xác thực bằng các lược đồ. Tất cả rất, rất hữu ích.


5
Ngoại trừ nội dung hỗn hợp trong đó dữ liệu chứa các thẻ. JSON không làm điều đó rất tốt cả.
S.Lott

11

Có rất nhiều chức năng sử dụng XSLT có thể không khả dụng với JSON. Vì vậy, nếu chúng không tương đương về chức năng, chúng không thể thay thế nhau.


3
Điều đó nói rằng, bạn có thể sử dụng một ngôn ngữ khác để giải tuần tự hóa, thao tác và tuần tự hóa JSON, và XSLT không phải là XML, vì vậy điểm này thực sự là vấn đề.
Người sử dụng Stuper

3
XSLT XML - xem lược đồ ở đây
treecoder

Cảm ơn @greengit, tôi chỉ có một bài trình bày ngắn gọn về nó, cập nhật câu trả lời.
StuperUser

2
@StuperUser: Làm thế nào có thể "không thể" với JSON? Nó chỉ là một sự biến đổi, có thể các công cụ vẫn còn thiếu. Hay là vấn đề liên quan đến việc thiếu các thuộc tính trong JSON?
maaartinus

1
@StuperUser: XSLT là một ngôn ngữ (tập hợp con của XML) mà một số trình thông dịch được viết bằng ít nhất một ngôn ngữ khác (có thể bằng C, Java, ...). Điều tương tự cũng có thể được thực hiện đối với JSON (xác định một số JSON-T, viết intepreter), phải không?
maaartinus

8

Thực tế là, chúng ta sẽ phải sống với cả hai trong một thời gian dài và việc trở thành một người khổng lồ JSON là "bị coi là có hại".


7

JSON là khá mới và các hệ thống kế thừa sẽ không hỗ trợ nó. Nâng cấp hệ thống kế thừa là nhanh chóng và giới thiệu các lỗi. JSON sẽ không thay thế XML bất cứ lúc nào trong tương lai gần.


2
Cảm ơn vì đã trả lời. Những gì tôi có trong tâm trí, là một đánh giá kỹ thuật, chứ không phải là một chiến lược thực hiện. Tôi chỉ muốn biết ví dụ, đối với các phiên bản mới của các hệ thống cũ đó, chúng ta có thể bỏ hoàn toàn XML và sử dụng JSON không? Nếu không, những gì chúng ta bỏ lỡ trong JSON?
Saeed Neamati

Mặt khác, tôi đã không sử dụng bất kỳ XML nào, chỉ JSON, trong vài năm qua. Và câu đố tốt. Tất nhiên XML là phức tạp hơn. Đó là tuyệt vời cho bảo mật công việc, không quá tuyệt vời cho hiệu quả.
gnasher729

6

Tôi muốn nói rằng cwallenpoole là một điểm tuyệt vời. Mặc dù hầu hết XML có thể được dịch sang JSON, nhưng liệu làm như vậy có tốt hơn cho nó hay không là một điểm riêng biệt.

JSON cho vay các cấu trúc dữ liệu ít nhất cũng như XML và có thể tốt hơn, nhưng XML đọc tự nhiên hơn nhiều so với JSON khi đánh dấu các tài liệu văn bản, trong đó các thẻ được sử dụng trong một luồng văn bản lớn hơn thay vì chỉ đơn giản là một cách để phân định thứ bậc của các lĩnh vực.

Mặc dù HTML 5 có thể có trình phân tích cú pháp riêng, nhưng vẫn để lại các ứng dụng như DocBook.


JSON rõ ràng có thể chứa các chuỗi có thể chứa HTML.
gnasher729

6

Nó phụ thuộc vào tên miền. Về mặt dịch vụ web? Chắc chắn rồi. Thật đáng xấu hổ khi các nhà cung cấp vẫn đang thúc đẩy SOAP cho khách hàng của họ. REST + JSON mọi cách.

Bây giờ, khi bạn đang nói về dữ liệu phức tạp, có cấu trúc với thông tin kiểu như Docbook hoặc cách triển khai khác? Đó là một miền thích hợp cho XML.


4

Tại sao lại giới hạn bản thân với JSON khi YAML là một siêu tập hợp và biểu cảm hơn và do đó mạnh hơn XML hoặc JSON.

Điều đó nói rằng, nếu bạn sử dụng các khung tuần tự hóa chính xác, bạn sẽ có thể tuần tự hóa và hủy tuần tự hóa tất cả các định dạng được đề cập ở trên với một vài dòng mã đơn giản.


3

Thật tệ khi bạn cố gắng mô hình hóa hai đối tượng này trong JSON:

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

Sử dụng JSON như đã quen với 99% trường hợp người ta bị lạc với:

{ name: "John Doe" } 

Và bây giờ bạn phải thêm một số cấu trúc meta và tất cả vẻ đẹp của JSON sẽ biến mất trong khi bạn còn lại những nhược điểm.


11
JSON tương đương với XML được cung cấp của bạn là { customer: { name: 'John Doe' }, employee : { name: 'John Doe' } }. Vì vậy, về mặt kỹ thuật, câu trả lời của bạn là không chính xác. :)
Saeed Neamati

Chắc chắn, điều duy nhất thiếu trong JSON là các thuộc tính và không có ích gì cho việc mô hình hóa các đối tượng (không giống như đánh dấu). Đôi khi các thuộc tính được sử dụng như một lối tắt cho những gì có thể được thể hiện bằng cách sử dụng dữ liệu lồng nhau (ví dụ: trong tệp cấu hình Hibernate), tiện dụng nhưng thực sự sự tồn tại của sự lựa chọn làm cho nó khó hơn. Các tệp cấu hình và các đối tượng mô hình hóa là hai nơi mà JSON rõ ràng là vượt trội.
maaartinus

2
@SaeedNeamati, vậy bạn sẽ lập mô hình <customer><name>John Doe</name></customer><customer><name>John Doe</name></customer>trong JSON như thế nào?
Svick

6
{khách hàng: [{name: 'John Doe'}, {name: 'John Doe'}]}?
Scrwtp

2
@Stijn - đúng, và nó hoạt động, nhưng nó xác nhận nhận xét từ câu trả lời ban đầu, rằng "bạn phải thêm một số cấu trúc meta" để mô hình hóa một số thứ rơi ra tự nhiên hơn trong XML.
Matt R

3

Tôi không biết liệu một phương tiện như vậy có tồn tại cho JSON hay không, nhưng trong .NET ít nhất bạn có thể xác thực XML dựa trên một lược đồ đã cho. Đó là một lợi thế có giá trị của XML trong mắt tôi.


2
json cũng có lược đồ: json-schema.org
lordvlad
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.