Khi nào thích JSON hơn XML?


148

Yêu cầu của tôi chỉ là hiển thị một tập hợp các giá trị được lấy từ cơ sở dữ liệu trên một trải bài. Tôi đang sử dụng jquery.

Câu trả lời:


149

Ưu tiên XML hơn JSON khi bất kỳ điều nào trong số này là đúng:

  • Bạn cần xác nhận tin nhắn
  • Bạn đang sử dụng XSLT
  • Tin nhắn của bạn bao gồm rất nhiều văn bản được đánh dấu
  • Bạn cần tương tác với các môi trường không hỗ trợ JSON

Yêu thích JSON hơn XML khi tất cả những điều này là đúng:

  • Tin nhắn không cần phải được xác nhận, hoặc xác nhận việc giải trừ của họ là đơn giản
  • Bạn không chuyển đổi tin nhắn, hoặc chuyển đổi quá trình khử lưu huỳnh của chúng là đơn giản
  • Tin nhắn của bạn chủ yếu là dữ liệu, không phải là văn bản được đánh dấu
  • Các điểm cuối nhắn tin có các công cụ JSON tốt

9
JSON không cung cấp bất kỳ lợi thế nào so với XML trong việc xử lý văn bản được đánh dấu. Nhưng tôi thấy quan điểm của bạn; điều đó có thể được cường điệu hóa.
Robert Rossney

10
Khi tất cả các điều kiện đều bằng nhau, hãy ưu tiên JSON vì hai lý do: JSON nhẹ hơn rất nhiều so với XML (thân thiện với CPU) và yêu cầu ít dữ liệu hơn để được chuyển (Thân thiện với mạng).
Roger Barreto

Khi nào bạn sẽ sử dụng XSLT và không sử dụng XML? XML được cung cấp nếu bạn đang sử dụng XSLT. Điều đó không nên hỗ trợ đối số để sử dụng XML. Giống như nói sử dụng JSON nếu bạn đang sử dụng JSON.parse (). Ngoài ra, tôi sẽ lập luận rằng việc chuyển đổi một đối tượng JSON dễ dàng hơn so với việc viết một biến đổi XSLT, nhưng đó có thể là xu hướng cá nhân của tôi.
Spencer

Tôi không hoàn toàn đồng ý với phần xác thực trong JSON. JSON cũng hợp lệ. Kiểm tra dự thảo IETF này: liên kết Đó là bản nháp nhưng vẫn ..
sotn

@sotn Bạn chưa có PL / SQL cho JSON như có XML (ví dụ XQuery). Đó là cơ sở cho một số NoQuery DB (eXist, MarkLogic Server, EMC Documentum xDB, BaseX, Zorba)
Dmytro Melnychuk

81

Tôi sử dụng JSON trừ khi tôi bắt buộc phải sử dụng XML. Hiểu đơn giản hơn và (vì nó yêu cầu ít chi phí cấu hình hơn), việc lập trình để đọc và viết sẽ dễ dàng hơn nếu các thư viện có sẵn trong ngữ cảnh của bạn và hiện tại chúng khá phổ biến.

Khi Amazon lần đầu tiên đưa ra danh mục của họ dưới dạng dịch vụ web, họ đã cung cấp cả JSON và XML. Một cái gì đó giống như 90% những người triển khai đã chọn JSON.


56
"Tôi sử dụng JSON trừ khi tôi bắt buộc phải sử dụng XML." ~ Chính xác.
EndangeredMassa

2
Vì vậy, câu hỏi sâu hơn là "Vì lý do gì bạn sẽ được yêu cầu sử dụng XML?" Là những lý do ngu ngốc; hoặc họ chỉ phản ánh những mối quan tâm khác nhau, từ một quan điểm khác nhau từ quan điểm của bạn?
13ren

5
Một số lý do có thể, bao gồm cả phần mềm hiện có mà tôi không muốn viết lại. Nhưng quan trọng nhất là sử dụng XML làm định dạng trao đổi dữ liệu trong đó tôi không kiểm soát cả hai đầu hoặc có một tiêu chuẩn chính thức áp dụng và yêu cầu XML. Tôi chỉ có thể chọn tùy ý khi tôi là nhà phát triển duy nhất tham gia.
dkretz

15

Xem xét trường hợp cụ thể của bạn khi bạn đang thực hiện javascript ở phía máy khách, tôi sẽ dùng JSON vì những lý do sau:

  • Vì JSON có nguồn gốc từ javascript, bạn phải viết ít mã hơn về phía máy khách - Chỉ cần eval()(hoặc, tốt hơn nữa JSON.parse()) , chuỗi JSON và nhận một đối tượng bạn có thể sử dụng.

  • Đồng thời đánh giá JSON ở phía máy khách sẽ hiệu quả hơn và do đó nhanh hơn.

  • Tuần tự hóa JSON tạo ra các chuỗi ngắn hơn XML. Sử dụng JSON sẽ giảm lượng dữ liệu chạy trên dây và cải thiện hiệu suất theo khía cạnh đó.

Dưới đây là một số bài đọc thêm: http://www.subbu.org/blog/2006/08/json-vs-xml


7
không phải là eval()một JSON lớn không?
shoosh

@Shy, trang web riêng của JSON cho biết bạn có thể sử dụng eval trên JSON (có dấu ngoặc đơn bao quanh): json.org/js.html
strager

9
Lấy từ json.org: Hàm eval rất nhanh. Tuy nhiên, nó có thể biên dịch và thực thi bất kỳ chương trình JavaScript nào, do đó có thể có các vấn đề bảo mật. Việc sử dụng eval được chỉ định khi nguồn đáng tin cậy và có thẩm quyền. An toàn hơn nhiều khi sử dụng trình phân tích cú pháp JSON
sarego

2
Thích JSON.parse () hơn eval ().
Havvy

14

Một số điều khác mà tôi đã gặp phải trong XML và JSON Relm:

JSON rất tốt cho

  • cặp tên / giá trị
  • lồng những cặp đó

Có nghĩa là nó có xu hướng thích một mảng hoặc mảng lồng nhau. Tuy nhiên JSON thiếu cả hai

  • thuộc tính
  • không gian tên

Vì vậy, nếu bạn kết hợp hai hoặc nhiều dịch vụ JSON, có thể có xung đột không gian tên tiềm năng. Điều đó có nghĩa là JSON có thể được sử dụng cho khoảng 90% những điều tương tự XML có thể được sử dụng khi trao đổi dữ liệu theo kinh nghiệm của tôi.


Một vấn đề khác của Json là bạn không thể dễ dàng hợp nhất hai tin nhắn json để tạo một tin nhắn json mới. Nó thường sẽ không được định dạng tốt ..
vtd-xml-tác giả

7
Bạn cần thuộc tính để làm gì? Nếu phần tử của bạn chứa các giá trị khác, hãy biến nó thành một đối tượng - các thành viên là "thuộc tính" của bạn. Thành thật mà nói, tôi nghĩ rằng các thuộc tính bifurcal / cấu trúc bộ chứa của XML hoàn toàn bất lợi.
foo

Tôi cho rằng JSON không có thuộc tính là một tính năng.
brian

11

Thông thường JSON nhỏ gọn hơn và phân tích nhanh hơn.

Thích XML nếu:

  • Bạn cần xử lý dữ liệu trên máy khách và bạn có thể tận dụng XSL cho điều đó. Rất có thể chuỗi XML + XSL sẽ hoạt động nhanh hơn JSON + JavaScript, đặc biệt là đối với các khối dữ liệu lớn.
    • Một trường hợp tốt là chuyển đổi dữ liệu thành đoạn mã HTML.
  • Các trường hợp di sản khác nhau:
    • Có một dịch vụ XML hiện có và thật rắc rối khi viết lại nó bằng JSON vì một số lý do.
    • Bạn phải đăng lại dữ liệu này dưới dạng XML sau một số xử lý ánh sáng bằng cách sử dụng đầu vào của người dùng.

Một trường hợp quan trọng của (gần như) XML: cố gắng phát hiện khi gửi đoạn mã HTML có lợi hơn gửi dữ liệu thô. AHAH có thể làm nên điều kỳ diệu trong các ứng dụng đơn giản, nhưng thường bị bỏ qua. Thông thường phong cách này giả định rằng một máy chủ gửi các đoạn mã HTML sẽ được nội tuyến trong trang web mà không cần xử lý.

Thông thường trong các trường hợp AHAH, CSS được sử dụng tối đa để xoa bóp các đoạn mã một cách trực quan và thực hiện các điều kiện đơn giản như ẩn / hiển thị các phần có liên quan của đoạn mã bằng cách sử dụng các cài đặt dành riêng cho người dùng hoặc ứng dụng cụ thể.


8

JSON dễ dàng và nhanh hơn để phân tích cú pháp. XML khó phân tích hơn một chút và phân tích và chuyển chậm hơn (trong hầu hết các trường hợp).

Vì bạn đang sử dụng jQuery, tôi khuyên bạn nên sử dụng JSON: jQuery có thể truy xuất dữ liệu JSON và tự động chuyển đổi nó thành một đối tượng Javascript. Thực tế, bạn có thể chuyển đổi dữ liệu JSON thành một đối tượng Javascript bằng cách sử dụng eval . XML sẽ phải được chuyển đổi thủ công bởi bạn (Tôi không biết cách thức hoạt động của Javascript trong Javascript, nhưng nó khó / khó chịu hơn trong hầu hết các ngôn ngữ mà tôi đã sử dụng thư viện XML).


1
JSON theo định nghĩa là một đối tượng JavaScript, jQuery không thực sự làm gì "chuyển đổi" đặc biệt. Chỉ cần nghĩ rằng nó nên được làm rõ.
Brian Gianforcaro

5
JSON không phải là một đối tượng javascript trừ khi nó được khởi tạo trong javascript. Nó xảy ra theo định dạng được sử dụng để tuần tự hóa các đối tượng javascript, nhưng nó có thể truy cập được (với các tiện ích bổ sung và tích hợp phù hợp) từ hầu hết các ngôn ngữ, ít nhất là dễ dàng như XML.
dkretz

@Gianforcaro, tôi nhận ra điều này. Tôi sẽ chỉnh sửa bài viết của mình để nói rõ hơn. @doofledorfer, tôi đã nói "và chuyển đổi nó thành một đối tượng Javascript." Tôi không nói dữ liệu JSON là một đối tượng Javascript.
strager

À, xin lỗi, đã không nắm bắt được điều đó.
strager

8

JSON luôn được ưu tiên về mặt xử lý mà trình duyệt máy khách phải thực hiện để phân tích dữ liệu. Ngoài ra, JSON là định dạng trao đổi dữ liệu trọng lượng nhẹ.

Phân tích cú pháp XML luôn tiêu tốn nhiều tài nguyên trình duyệt và nên tránh càng nhiều càng tốt trừ khi có yêu cầu khác.


7

Tôi có một bài đăng trên blog về chủ đề chi tiết về lịch sử của các giao thức web (ví dụ SOAP, XML, JSON, REST, POX, v.v.) cung cấp một bản tóm tắt cũng như một số ưu điểm và nhược điểm của từng giao thức: http://www.servicestack.net / huyền thoại_blog /? p = 154

Tôi thực sự nghĩ rằng bạn có thể rút ra nhiều điểm tương đồng giữa XML và JSON bằng cách so sánh sự khác biệt giữa các ngôn ngữ động (JSON) và tĩnh (XML).

Về cơ bản XML là một định dạng tuần tự hóa chặt chẽ hơn, cứng nhắc hơn, có thể được xác minh tùy ý bằng một lược đồ đi kèm (có thể là XSD hoặc DTD). XSD khá phức tạp và cho phép bạn mô tả nhiều loại khác nhau, ví dụ: Ngày, Thời gian, Số lượng, Kiểu xác định người dùng và thậm chí Kiểu kế thừa, v.v. SOAP xây dựng một cách hiệu quả trên bộ tính năng XML cung cấp một cách tiêu chuẩn để mô tả các dịch vụ web của bạn ( ví dụ như các loại và hoạt động) thông qua WSDL. Độ dài và độ phức tạp của thông số WSDL có nghĩa là việc phát triển với nó có thể tẻ nhạt hơn nhưng đồng thời có nhiều công cụ hơn dành cho bạn và hầu hết các ngôn ngữ hiện đại cung cấp các công cụ tự động để tạo ra một số gánh nặng cho khách hàng của bạn. tắt khi cố gắng tương tác với các dịch vụ bên ngoài.

Tôi vẫn sẽ khuyên bạn nên sử dụng XML cho các dịch vụ web của mình nếu bạn có một 'dịch vụ doanh nghiệp' được xác định rõ, không chịu sự thay đổi thường xuyên hoặc dịch vụ web của bạn cần được truy cập từ nhiều ngôn ngữ khác nhau.

Đối với tất cả các lợi ích của nó, XML cũng đi kèm với nhược điểm. Nó dựa vào các không gian tên để cung cấp một định dạng mở rộng được gõ và cho phép bạn chỉ định các thuộc tính và thành phần trong cùng một tài liệu. Có các không gian tên khác nhau trong một tài liệu có nghĩa là rất nhiều thời gian khi sử dụng Trình phân tích cú pháp Xml để trích xuất dữ liệu, bạn cũng sẽ cần cung cấp không gian tên của từng thành phần bạn muốn truy xuất / duyệt qua. Nó cũng ngoại suy tải trọng làm cho nó dài dòng hơn mức cần thiết. Có tùy chọn để xuất các thuộc tính cũng như các phần tử có nghĩa là các lớp của bạn không ánh xạ độc đáo vào một tài liệu XML. Các tính năng này làm cho nó phù hợp với chương trình kém đối với hầu hết các ngôn ngữ làm cho nó trở nên tẻ nhạt và cồng kềnh hơn khi làm việc.

Mặt khác, JSON hoàn toàn ngược lại với XML theo nhiều cách vì nó rất lỏng lẻo và chỉ có hỗ trợ đơn giản cho các loại cơ bản: Số, Bool, chuỗi, Đối tượng và Mảng. Tất cả mọi thứ khác về cơ bản phải phù hợp với một chuỗi. Điều này không tốt khi cố gắng giao tiếp qua các ranh giới ngôn ngữ vì bạn sẽ cần phải tuân thủ một số đặc điểm kỹ thuật phi tiêu chuẩn ngoài băng nếu bạn muốn hỗ trợ các loại cụ thể hơn. Trên upside hạn chế tính năng của nó làm cho một sự phù hợp chương trình tốt với hầu hết các ngôn ngữ - và hoàn toàn phù hợp cho JavaScript như là một chuỗi JSON có thể được eval'ed trực tiếp vào đối tượng JavaScript.

Kích thước và hiệu suất

Tôi có sẵn một số điểm chuẩn cơ sở dữ liệu của Northwind so sánh kích thước và tốc độ giữa các triển khai XML và JSON của microsofts. Về cơ bản XML có kích thước lớn hơn gấp 2 lần JSON nhưng đồng thời, có vẻ như Microsoft đã nỗ lực rất nhiều trong việc tối ưu hóa XML DataContractSerializer của họ vì nó nhanh hơn 30% so với JSON của họ. Có vẻ như bạn phải đánh đổi giữa kích thước và peformance. Không hài lòng với thực tế này, tôi quyết định viết JsonSerializer nhanh của riêng mình , hiện nhanh hơn 2,6 lần so với XML của MS - rất tốt trong cả hai thế giới :).


6

Tôi sẽ chọn XML trên JSON nếu tôi cần xác thực đoạn dữ liệu đến, bởi vì XML hỗ trợ điều này thông qua XSD.


3

từ JSON - đôi chân cuối cùng

Khi bạn đi xuống tuyến đường JSON, bạn gặp phải các vấn đề tương tự mà XML đã gặp phải 10 năm trước:

Trộn dữ liệu từ hai nguồn khác nhau vào một gói JSON có thể khiến các nhãn phần tử va vào nhau. Trộn một phiếu đóng gói và hóa đơn, và đột nhiên địa chỉ Từ có thể có nghĩa gì đó khá khác biệt. Đó là lý do tại sao XML có không gian tên .

Chuyển đổi giữa các cấu trúc JSON khác nhau sẽ yêu cầu viết mã trần tục. Một cách khai báo hơn để ánh xạ dữ liệu sẽ giúp công việc dễ dàng hơn. Đó là lý do tại sao XML có XSLT .

Mô tả cấu trúc của gói JSON trong các trường, kiểu dữ liệu, v.v. của nó là cần thiết để mọi người nối vào các dịch vụ của bạn. Điều cần thiết là phải có một ngôn ngữ siêu dữ liệu cho việc này. Đó là lý do tại sao XML có các lược đồ .

Thực hiện hai cuộc hội thoại máy khách-máy chủ đồng thời chăm sóc. Nếu bạn hỏi máy chủ hai câu hỏi và nhận lại một câu trả lời, làm thế nào để bạn biết câu hỏi nào nó trả lời? Đó là lý do tại sao XML có WS-Correlation .


2
Không gian tên chỉ là một cách giải quyết khác; bạn có thể làm tương tự trong JSON nếu bạn muốn. WS-Correlation cũng được thêm vào như là một suy nghĩ cho XML và không phải là "tích hợp". Bạn cũng có thể thêm nó vào JSON. Mô tả cấu trúc (Lược đồ) không đặc biệt đối với XML; bạn có thể làm điều đó theo một số cách đối với bất kỳ ngôn ngữ chính thức nào kể từ khi phát minh ra eBNF. XSLT là một điểm bán hàng hợp lệ, mặc dù.
foo

2

JSON là mã hóa riêng cho javascript. Nó sẽ nhanh hơn và dễ dàng hơn để làm việc với.


2

Từ dòng đầu tiên tại http://json.org/xml.html

Ngôn ngữ đánh dấu mở rộng (XML) là một định dạng văn bản có nguồn gốc từ ngôn ngữ đánh dấu tổng quát hóa tiêu chuẩn (SGML). So với SGML, XML đơn giản. HyperText Markup Language (HTML), bằng cách so sánh, thậm chí còn đơn giản hơn. Mặc dù vậy, một cuốn sách tham khảo tốt về HTML là một inch dày. Điều này là do định dạng và cấu trúc của tài liệu là một doanh nghiệp phức tạp. . . .

Rõ ràng JSON nhanh hơn, nhưng thậm chí còn rõ ràng hơn rằng nó khó đọc. Sử dụng JSON cho tốc độ, sử dụng XML nếu có tương tác giữa người với người và bạn có thể hy sinh tốc độ.


2
Câu trả lời của bạn không mang lại bất kỳ thông tin mới nào ... Nhưng tôi đoán nó vẫn đúng

1

Tôi sử dụng JSON cho bất kỳ loại cấu hình, trao đổi dữ liệu hoặc nhắn tin. Tôi chỉ sử dụng XML nếu tôi phải vì lý do khác hoặc đánh dấu ngữ nghĩa dữ liệu giống như tài liệu.


1

Cả XML và JSON đều được Microsoft hỗ trợ. Chữ XML là tính năng thú vị mới trong VB 9. Trong phiên bản sắp tới của ASP.NET 4.0 JSON là điều bắt buộc để tận dụng sức mạnh của việc tạo khuôn mẫu phía máy khách.

Từ câu hỏi bạn đã hỏi, có vẻ như JSON có thể là lựa chọn cho bạn vì nó dễ xử lý ở phía máy khách có hoặc không có jQuery.


1

Sử dụng JSON

  • Nếu dữ liệu được sử dụng bởi JavaScript trong trình duyệt.
  • Mô hình dữ liệu đơn giản và không phức tạp (quá nhiều đối tượng tổng hợp).

Sử dụng XML

  • Chủ yếu là trong một loại môi trường mà bạn đang tích hợp một số dịch vụ trên các nền tảng và công nghệ không đồng nhất.
  • SOAP có một lợi thế là nó có thể được truyền qua các giao thức khác nhau ngoài HTTP.
  • Dễ sử dụng trong công cụ chuyển đổi mô hình dữ liệu như XSLT, XSL-FO, v.v.
  • Rất nhiều cơ sở dữ liệu hỗ trợ để lưu trữ / truy vấn dữ liệu XML (XQuery).
  • XML là một định dạng dữ liệu rất thành thục, vì vậy bạn sẽ tìm thấy nhiều công cụ để hỗ trợ mọi trường hợp sử dụng mà bạn có thể nghĩ ra.

1

Tôi tìm thấy bài viết này tại chợ kỹ thuật số thực sự thú vị.

Một số phần từ bài viết được trích dẫn dưới đây.

Về ưu điểm JSON:

Nếu tất cả những gì bạn muốn vượt qua là các giá trị nguyên tử hoặc danh sách hoặc giá trị băm của các giá trị nguyên tử, JSON có nhiều ưu điểm của XML: nó có thể sử dụng trực tiếp trên Internet, hỗ trợ nhiều ứng dụng, dễ dàng viết các chương trình để xử lý JSON, nó có một vài tính năng tùy chọn, dễ đọc và hợp lý rõ ràng, thiết kế của nó trang trọng và súc tích, các tài liệu JSON dễ tạo và sử dụng Unicode. ...

Về ưu điểm XML:

XML xử lý rất tốt với sự phong phú đầy đủ của dữ liệu phi cấu trúc. Tôi hoàn toàn không lo lắng về tương lai của XML ngay cả khi cái chết của nó được tổ chức một cách vui vẻ bởi một cán bộ thiết kế API web.

Và tôi không thể cưỡng lại việc nói "Tôi đã nói với bạn như vậy!" mã thông báo đi trong bàn của tôi. Tôi mong muốn được thấy những người JSON làm gì khi họ được yêu cầu phát triển các API phong phú hơn. Khi họ muốn trao đổi dữ liệu ít cấu trúc tốt hơn, họ sẽ chuyển nó thành JSON? Tôi thấy thỉnh thoảng đề cập đến một ngôn ngữ lược đồ cho JSON, các ngôn ngữ khác có tuân theo không? ...


Câu trả lời này và các trích đoạn đã cung cấp hoàn toàn sai lệch về kỳ hạn của bài viết được trích dẫn, trong đó ủng hộ mạnh mẽ JSON. Các trích dẫn là của một bên thứ ba mà tác giả của bài viết không đồng ý. Các bài báo được trích dẫn là một bài đọc rất tốt - vì vậy không có downvote về câu trả lời này, mặc dù sự trình bày sai.
Lawrence Dol

1

Quy tắc nhanh:

  • JSON: định dạng dữ liệu theo chương trình
  • YAML (JSON superset): định dạng dữ liệu từ người đến chương trình
  • XML: định dạng đánh dấu tài liệu

Giải trình:

Vai trò duy nhất của JSON là tuần tự hóa dữ liệu hướng đối tượng bằng cách sử dụng các loại dữ liệu phổ biến cho hầu hết các ngôn ngữ lập trình: danh sách , giá trị bămvô hướng và vì mục đích đó, nó thực sự không thể bị đánh bại hoặc cải thiện. Để nói "JSON không có số phiên bản [vì] không có sửa đổi cho ngữ pháp JSON được dự đoán". - Douglas Crockford (Không thể đánh bại đó là một dấu hiệu cho thấy bạn hoàn thành công việc của mình một cách hoàn hảo)

XML đã từng được bán dưới dạng định dạng thay đổi dữ liệu, nhưng hãy xem xét hai trường hợp sử dụng phổ biến nhất: Giao tiếp máy chủ-máy khách không đồng bộ (AJAX) - JSON đã thay thế hoàn toàn XML (X thực sự phải là J) và các dịch vụ web : JSON đã biến XML thành một sự thay thế dự phòng.

Một thứ khác XML được sử dụng rộng rãi là các tệp dữ liệu có thể ghi / đọc được (?) Cho các chương trình, nhưng ở đây bạn cũng có một định dạng ngắn gọn hơn, thân thiện với chương trình hơn, thân thiện với con người hơn trong YAML, một siêu bộ JSON.

Vì vậy, để biểu diễn dữ liệu, JSON đánh bại XML trên bảng. Còn lại gì cho XML? Đại diện tài liệu nội dung hỗn hợp, đó là những gì nó được dự định .


0

Hầu hết các công nghệ web mới hơn đều hoạt động bằng JSON, vì vậy chắc chắn là một lý do chính đáng để sử dụng JSON. Một lợi thế lớn là trong XML, bạn có thể biểu diễn theo nhiều cách khác nhau cùng một thông tin, điều này trong JSON đơn giản hơn.

Ngoài ra JSON IMHO rõ ràng hơn nhiều so với XML, điều này giúp tôi có một lợi thế rõ ràng. Và nếu bạn đang làm việc với .NET, Json.NET là một người chiến thắng rõ ràng để giúp bạn làm việc với JSON.

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.