Câu trả lời:
Ưu tiên XML hơn JSON khi bất kỳ điều nào trong số này là đúng:
Yêu thích JSON hơn XML khi tất cả những điều này là đúng:
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.
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
eval()
một JSON lớn không?
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ó 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
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.
Thông thường JSON nhỏ gọn hơn và phân tích nhanh hơn.
Thích XML nếu:
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ể.
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).
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 :).
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 .
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 độ.
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.
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.
Sử dụng JSON
Sử dụng XML
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? ...
Quy tắc nhanh:
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ăm và vô 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 .
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.