2009-02-25 71 views

Trả lời

17

Tóm lại, JSON (có thể được coi là một tập con của JavaScript) có độ nghiêng rất nhiều so với XML. Này có một số tích cực tác dụng phụ

  • JSON là nhỏ hơn so với XML
  • tương ứng JSON là nhanh hơn, tức là cú pháp đơn giản hơn -> dễ dàng phân tích cú pháp (phân tích nhanh hơn)

Trong câu trả lời ban đầu của tôi cho câu hỏi này, quan điểm của tôi về JSON là JavaScript, tôi coi nó là một người họ hàng gần gũi. Nhưng JSON là một cái gì đó độc lập và JSON.org thực hiện một công việc tuyệt vời khi mô tả JSON. Nó cũng cung cấp một thư viện tương thích cho JavaScript có thêm hỗ trợ cho JSON.parseJSON.stringify khi không được trình duyệt hỗ trợ.

Trong khi eval vào thời điểm (giữa năm 2009) được sử dụng để đánh giá JavaScript, nó cũng có thể đánh giá JSON, tức là phân tích cú pháp JSON, nhưng nó được coi là không an toàn, vì nó cho phép JavaScript tùy ý thực thi.

JSON chỉ xảy ra là rất phù hợp cho các trình duyệt và một cách tự nhiên để phát triển nền tảng do mối quan hệ chặt chẽ với JavaScript.

Mặc dù XML có thể được coi là có độ cứng tốt hơn do thực tế là bạn có thể nhập nó, nó cũng là những thứ làm cho nó chậm hơn rất nhiều (nó cũng là một chút chi tiết theo ý kiến ​​của tôi). Nhưng nếu đây là điều bạn thực sự muốn, bạn nên sử dụng nó, XML cũng không kém phần phổ biến.

Tôi sẽ không tham gia vào một cuộc tranh luận về động hoặc được nhập tĩnh, nhưng tôi sẽ nói điều này. Thật dễ dàng để thêm nội dung vào đầu dữ liệu không có lược đồ và có rất nhiều cách để thực hiện xác thực, bất kể lược đồ hoặc không có lược đồ.

+0

JSON phù hợp hơn XML như thế nào để thể hiện nội dung động? – Guillaume

+1

@John: Bạn đang trộn phân tích cú pháp với thực thi. Họ là hai con thú khác nhau. – dirkgently

+1

@Guillaume và dirkgently - JSON đơn giản hơn rất nhiều để làm việc cùng với kịch bản trình duyệt. Phù hợp hơn để đẩy dữ liệu vào máy khách. Tôi thích suy nghĩ về JSON như JavaScript chuyên biệt bởi vì nó sẽ cho phép tôi phát ra hành vi từ mã phía máy chủ mà không phải là gọn gàng với XML. –

1

Bạn có thể muốn đọc JSON: The Fat-Free Alternative to XML. Với JSON, bạn có thể đánh lừa xung quanh với các cuộc gọi lại và fro giữa nguồn và đích của một yêu cầu và thực sự sử dụng nó một cách không đau đớn trong mã Javascript hiện tại của bạn.

+0

Liên kết bị hỏng (ít nhất là đối với tôi .. .) –

+0

@ido: try json.org – dirkgently

1

Liên kết dirkgently cung cấp có tóm tắt tốt về sự khác biệt (cuộn xuống dưới). Các điểm quan trọng là:

JSON: nhỏ hơn, có thể đại diện cho tất cả các ký tự unicode (xml không thể bằng UTF8, ít nhất, theo thông số riêng của nó). Nó cũng tầm thường để sử dụng nó trong các ứng dụng AJAX (vì hàm javascript() của javascript), đặc biệt là các tính năng nâng cao hơn như jsonp (các câu trả lời gọi các callback).

XML: Có rất nhiều công cụ để dễ dàng truy vấn cấu trúc của cấu trúc. Kể từ khi nó lớn hơn và thành lập hơn, nó cũng có nhiều công cụ hỗ trợ nói chung.

Nói chung, họ có thể thực hiện những điều tương tự (bạn có thể thực hiện jsonp qua xml, nó sẽ chỉ yêu cầu phân tích cú pháp gọi lại theo cách thủ công).

+0

Tôi không đồng ý với tuyên bố của bạn rằng XML không thể đại diện cho tất cả các ký tự Unicode. Bạn chỉ cần đặt mã hóa thành Unicode ("UTF-16"). Xem cách thực hiện: http://www.w3schools.com/xml/xml_encoding.asp – MikeTeeVee

+0

Wow, đây là một lúc trước :). Không có các ký tự bị cấm rõ ràng trong XML? Tôi dường như nhớ một số chồng chéo giữa những người và utf8 cho chắc chắn, không chắc chắn về utf16. Tôi đã cập nhật câu trả lời của mình để phản ánh rằng câu trả lời của nó trong, ít nhất là, utf8. –

8

Bạn có trong bài viết này "The AJAX response: XML, HTML, or JSON?" một cuộc tranh luận đầy đủ về chủ đề đó:

XML

  • Ưu
    Ưu điểm quan trọng nhất của XML là nó nhiều nhất định dạng dễ đọc cho người khác.
    Lợi thế thứ hai là XML đã có từ lâu và nhiều nhà phát triển đã quen với nó.
  • Nhược điểm
    JavaScript cần để chèn dữ liệu vào trang HTML khá dài dòng.

JSON

  • Ưu
    Ưu điểm quan trọng nhất là JSON làm hỏng tính chính sách cùng nguồn JavaScript, nếu bạn nhập các tập tin JSON như một <script> thẻ mới. Xem Simon Willison's example để biết chi tiết đẫm máu.
    JavaScript không cho phép bạn truy cập tài liệu (có thể là XML hoặc HTML) đến từ một máy chủ khác. Tuy nhiên, nếu bạn nhập tệp JSON dưới dạng thẻ tập lệnh, bạn sẽ tránh được sự cố này và mọi dữ liệu JSON có thể được nhập vào bất kỳ trang web nào. Nó phụ thuộc vào mục tiêu kinh doanh của bạn cho dù đây là một điều tốt hay xấu, nhưng bây giờ nó là định dạng dữ liệu duy nhất cho phép truy cập không giới hạn.
    Lợi thế thứ hai là các tập lệnh cho dữ liệu JSON đơn giản hơn một chút và hơi phù hợp hơn với phần còn lại của ngôn ngữ JavaScript so với các tập lệnh cho dữ liệu XML.
  • Nhược điểm
    Điều bất lợi quan trọng nhất của JSON là định dạng rất khó đọc cho con người, và tất nhiên, mỗi dấu phẩy, dấu ngoặc đơn và dấu ngoặc đơn phải chính xác. Trong khi điều này cũng đúng với XML, cú pháp phức tạp của JSON, giống như}}]} ở cuối đoạn mã dữ liệu, có thể làm cho người mới sợ hãi và làm cho việc gỡ rối phức tạp.

Từ nhận xét, JSON được coi là nhanh hơn để xử lý hơn XML.

+0

Không có lý do gì để nhồi XML vào DOM phải khó, nếu thiết kế ở phía máy chủ có tính đến hành vi đó. Một công việc thiết kế nhỏ ở phía máy chủ có thể làm giảm đáng kể nỗ lực của trình duyệt. –

+0

Một điểm lố bịch như vậy; JSON khó đọc cho con người? Bạn có nghiêm túc sử dụng câu trả lời này không? JSON cực kỳ dễ dàng hơn XML để đọc cho con người; phổ biến thực tế. Tôi không thể tin được lời tuyên bố ngu ngốc như thế nào! – TheBlackBenzKid

17

Một ưu điểm của XML mà tôi không thấy trong phần thảo luận là XML có thể có lược đồ. Đây là giá trị lớn trong việc mô tả cấu trúc của XML. Đối với cấu trúc dữ liệu đơn giản, JSON và một chút văn bản mô tả những gì bạn đang làm là tốt. Khi làm việc với các cấu trúc dữ liệu phức tạp hơn, hoặc khi người tạo và người tiêu dùng dữ liệu không phải là cùng một nhóm, việc có một Schema có thể giúp giao tiếp rất nhiều.

Ngoài ra, có một schema có nghĩa là bạn có thể xác nhận dữ liệu của bạn, có thể tiết kiệm khi cố gắng để gỡ lỗi lỗi Complexe cuộc sống ...

+0

giản đồ không phải lúc nào cũng được yêu cầu nghiêm ngặt, đặc biệt là làm việc cho NoSQL! –

2

Trong khi tôi thích Json và muốn giới thiệu nó, tôi nghĩ rằng không có sự khác biệt cơ bản giữa tốc độ xử lý tối ưu. Sự khác biệt giữa các thư viện và nền tảng quan trọng hơn: trình phân tích cú pháp xml tốt nhanh hơn trình phân tích cú pháp json xấu và ngược lại. Vì vậy, thường hiệu suất của các định dạng bản thân không phải là một yếu tố lớn. Cả hai đều có thể chiếu sáng nhanh (Java có một vài trình phân tích cú pháp tốt cho cả hai, ví dụ, các ngôn ngữ khác có thể xảy ra quá).

Vì tính nhỏ gọn, phụ thuộc vào loại dữ liệu, Json thường nhỏ hơn một chút, nhưng không hoàn toàn như vậy. Ngoại trừ nếu bạn có nhiều mảng/danh sách, ký hiệu json "{...}" nhỏ hơn nhiều so với gắn thẻ xml (trừ khi bạn sử dụng khoảng trắng nếu có thể, như "1 2 3 4").

5

Một ưu điểm của XML chưa được đề cập đến là có thể sử dụng XSLT để trích xuất dữ liệu từ một tài liệu XML bằng cách sử dụng các biểu thức XPath phức tạp tùy ý. Tôi không thể nhìn thấy một cách để làm điều này trong JSON. Làm thế nào bạn sẽ tìm thấy tất cả các đối tượng trong một tài liệu JSON có chứa một trường "tiền tệ" như là một hậu duệ trực tiếp, không phân biệt nơi các đối tượng xảy ra trong cấu trúc? Trong XML với XSLT/XPath, điều này rất dễ dàng.

Tuy nhiên, thực hiện việc này trong trình duyệt có giá. Bạn sẽ chạy vào các trình duyệt cụ thể, và nó có thể sẽ chậm hơn và nhiều bộ nhớ hơn.

+1

* "Làm cách nào bạn tìm thấy tất cả các đối tượng trong tài liệu JSON có chứa trường" tiền tệ "dưới dạng hậu duệ trực tiếp, bất kể nơi các đối tượng xuất hiện trong cấu trúc?" * Tương tự như biến áp XSLT, bằng cách đi bộ cấu trúc và tìm chúng. Chỉ vì không có một biến thể JSON nổi tiếng không có nghĩa là không thể có, hoặc nó sẽ ít hữu ích hơn phiên bản XML. –

0

tôi nghĩ rằng một lợi thế khác của Json là nó không sử dụng <> dấu ngoặc và bạn có thể đặt mã html trong đó mà không có nhiều nhầm lẫn.

0

JSON là nhẹ, AJAX thân thiện (coi như là tập hợp con của Javascript) và dễ dàng serializable. XML làm tất cả những điều này nhưng sau khi uống một ít sữa.

Các vấn đề liên quan