Tại sao mọi người chọn JSON trên XML cho jQuery? [đóng cửa]


155

Tôi nghĩ rằng XML có tính di động cao và có thể được sử dụng như một cơ sở dữ liệu nhỏ. Tôi đã thấy XML được sử dụng ở mọi nơi. Tôi thậm chí còn thấy các công ty lớn chuyển sang JSON . Ngay cả Microsoft cũng đã tích hợp hỗ trợ cho JSON. Tất cả sự cường điệu trên JSON là gì?


14
"Mọi người" và "mọi nơi" là những thuật ngữ tuyệt đối như vậy ...
Matthew Groves

73
@eliben XML thực sự không hút. Nó rất mạnh nhưng cũng giống như săn dại bằng súng phóng tên lửa, nó có thể không phải lúc nào cũng là lựa chọn tốt nhất.
Dan

20
Hầu hết những gì mọi người hiện đang sử dụng XML sẽ tốt hơn trong JSON
MGOwen

39
@Dan Nếu XML chỉ thú vị như săn thỏ bằng bệ phóng tên lửa (có lẽ - tôi không thể nói rằng tôi đã tự mình thử nó)
David Johnstone

4
bởi vì 'Giải pháp thay thế không béo cho XML' -json.org
DMin

Câu trả lời:


226

Về cơ bản vì JSON được nhận dạng nguyên bản bởi JavaScript, nên nó thực sự nhẹ, tối giản và có tính di động cao vì nó chỉ dựa trên hai cấu trúc cơ bản:

  • Một bộ sưu tập các cặp tên / giá trị. Trong các ngôn ngữ khác nhau, điều này được nhận ra dưới dạng một đối tượng, bản ghi, cấu trúc, từ điển, bảng băm, danh sách khóa hoặc mảng kết hợp.
  • Một danh sách sắp xếp các giá trị. Trong hầu hết các ngôn ngữ, điều này được nhận ra dưới dạng một mảng, vectơ, danh sách hoặc chuỗi.

3
+1 .. thực sự .. rất nhiều kiểu dữ liệu khác nhau hỗ trợ rất nhiều vấn đề so với văn bản xml thô
Xinus

48
+1, đặc biệt là khi phân tích cú pháp JSON hiệu quả hơn nhiều so với phân tích cú pháp XML, thậm chí là từng phần. Khi các bộ dữ liệu bạn quan tâm vượt quá một ngưỡng nhất định (và nhỏ đáng sợ), sự khác biệt hiệu suất là đáng chú ý.
Magsol

1
Ai đó chỉ cho tôi dữ liệu nói rằng phân tích cú pháp JSON nhanh hơn XML trong các trình duyệt hiện đại. Một câu trả lời trên SO ở đây nói khác: stackoverflow.com/questions/4596465/ cấp
HDave

136

XML không thực sự bắt đầu tỏa sáng cho đến khi bạn bắt đầu trộn lẫn các lược đồ có tên khác nhau. Sau đó, bạn thấy JSON bắt đầu rơi xuống, nhưng nếu bạn chỉ cần một định dạng tuần tự hóa cho dữ liệu của mình, thì JSON nhỏ hơn, nhẹ hơn, dễ đọc hơn và thường nhanh hơn XML.


31
+1 để hiển thị những gì XML thực sự hữu ích cho. Mọi người thường sử dụng XML ngay cả khi họ có thể làm được điều gì đó đơn giản hơn nhiều.
Daniel Pryden

1
Vâng sẽ phải đồng ý với jcd và Daniel ở đây. Đáp ứng chất lượng về lý do tại sao XML vẫn còn khá tốt đối với một số thứ.
nổi tiếng

3
Làm thế nào là XML ít dễ đọc hơn, tôi thấy hầu như không thể đọc json trong đó tôi nghĩ rằng hệ thống phân cấp của XML dễ hiểu hơn nhiều (chắc chắn là một ít chữ). Có lẽ tôi chỉ chưa làm việc đủ với JSON
Colton

không gian tên là một giải pháp xml để giải quyết các vấn đề nhất định khi bạn thực hiện mọi thứ với XML. Nếu bạn đang sử dụng json, hãy tìm một giải pháp json để giải quyết những vấn đề tương tự theo cách json. Đối với tôi, đối số không gian tên giống như "Ồ! Nhưng json không có thuộc tính!"
redben

61

Tôi thấy rằng một lợi ích lớn của JSON so với XML là tôi không phải quyết định cách định dạng dữ liệu. Như một số người đã chỉ ra, có rất nhiều cách để thực hiện ngay cả các cấu trúc dữ liệu đơn giản trong XML - như các phần tử, như các giá trị thuộc tính, v.v. Sau đó, bạn phải ghi lại nó, viết Lược đồ XML hoặc Thư giãn NG hoặc một số thứ nhảm nhí khác ... Đó là một mớ hỗn độn.

XML có thể có giá trị của nó, nhưng đối với trao đổi dữ liệu cơ bản, JSON nhỏ gọn và trực tiếp hơn nhiều. Là một nhà phát triển Python, không có sự không khớp trở kháng giữa các kiểu dữ liệu đơn giản trong JSON và trong Python. Vì vậy, nếu tôi đang viết một trình xử lý phía máy chủ cho một truy vấn AJAX đang hỏi về điều kiện tuyết cho một khu nghỉ dưỡng trượt tuyết cụ thể, tôi sẽ xây dựng một từ điển như sau:

conditions = {
    'new_snow_24': 5.0,
    'new_snow_48': 8.5,
    'base_depth': 88.0,
    'comments': 'Deep and steep!',
    'chains_required': True,
}
return simplejson.dumps(conditions)   # Encode and dump `conditions` as a JSON string

Khi được dịch qua JSON (sử dụng một thư viện như 'simplejson' cho Python), cấu trúc JSON kết quả trông gần giống nhau (ngoại trừ trong JSON, các booleans được đặt thấp hơn).

Giải mã cấu trúc đó chỉ yêu cầu trình phân tích cú pháp JSON, cho dù đó là Javascript hay Objective-C cho ứng dụng iPhone gốc hoặc C # hoặc máy khách Python. Các float sẽ được hiểu là float, các chuỗi như các chuỗi và booleans là booleans. Sử dụng thư viện 'Simplejson' trong Python, một simplejson.loads(some_json_string)câu lệnh sẽ trả lại cho tôi cấu trúc dữ liệu đầy đủ như tôi vừa làm trong ví dụ trên.

Nếu tôi viết XML, tôi phải quyết định nên làm các phần tử hay thuộc tính. Cả hai điều sau đây đều hợp lệ:

<conditions>
    <new-snow-24>5</new-snow-24>
    <new-snow-48>8.5</new-snow-48>
    <chains-required>yes</chains-required>
    <comments>deep and steep!</comments>
</conditions>

<conditions newSnow24="5" newSnow48="8.5" chainsRequired="yes">
   <comments>deep and steep!</comments>
</conditions>

Vì vậy, tôi không chỉ phải suy nghĩ về dữ liệu mà tôi có thể muốn gửi cho khách hàng, tôi còn phải suy nghĩ về cách định dạng nó. XML, mặc dù đơn giản hơn SGML đơn giản bằng cách nghiêm ngặt hơn với các quy tắc của nó, vẫn cung cấp quá nhiều cách để suy nghĩ về dữ liệu đó. Sau đó, tôi sẽ phải đi về việc tạo ra nó. Tôi không thể lấy một từ điển Python (hoặc cấu trúc dữ liệu đơn giản khác) và nói "hãy tự biến mình thành XML của mình". Tôi không thể nhận tài liệu XML và ngay lập tức nói "hãy tự biến mình thành các đối tượng và cấu trúc dữ liệu" mà không cần viết trình phân tích cú pháp tùy chỉnh hoặc không yêu cầu chi phí bổ sung của Lược đồ XML / Thư giãn NG và các cơn đau khác.

Tóm lại, đó là việc mã hóa và giải mã dữ liệu thành JSON dễ dàng hơn nhiều, đặc biệt là cho các trao đổi nhanh. Điều này có thể áp dụng nhiều hơn cho những người đến từ nền tảng ngôn ngữ động, vì các loại dữ liệu cơ bản (danh sách, từ điển, v.v.) được tích hợp vào JavaScript / JSON trực tiếp ánh xạ tới các loại dữ liệu tương tự hoặc tương tự trong Python, Perl, Ruby, v.v.


34

Hiệu năng của JSON không khác nhiều so với XML đối với hầu hết các trường hợp sử dụng, JSON không phù hợp và dễ đọc đối với các cấu trúc lồng sâu ... bạn sẽ gặp phải]]]}], điều này gây khó khăn cho việc gỡ lỗi


31

Nó nhẹ so với XML. Nếu bạn cần mở rộng quy mô, giảm yêu cầu băng thông của bạn!

So sánh JSON

 [
      {
           color: "red",
           value: "#f00"
      },
      {
           color: "green",
           value: "#0f0"
      },
      {
           color: "blue",
           value: "#00f"
      },
      {
           color: "cyan",
           value: "#0ff"
      },
      {
           color: "magenta",
           value: "#f0f"
      },
      {
           color: "yellow",
           value: "#ff0"
      },
      {
           color: "black",
           value: "#000"
      }
 ]

sang XML:

 <colors>
      <color >
           <name>red</name>
           <value>#f00</value>
      </color>
      <color >
           <name>green</name>
           <value>#0f0</value>
      </color>
      <color >
           <name>blue</name>
           <value>#00f</value>
      </color>
      <color >
           <name>cyan</name>
           <value>#0ff</value>
      </color>
      <color >
           <name>magenta</name>
           <value>#f0f</value>
      </color>
      <color >
           <name>yellow</name>
           <value>#ff0</value>
      </color>
      <color >
           <name>black</name>
           <value>#000</value>
      </color>
 </colors>

23
không chỉ nhỏ hơn, mà còn thân thiện với con người hơn. XML trông giống như một nỗ lực kém của con người để nói chuyện như một máy tính.
deft_code

15
XML của bạn cũng có thể giảm các thuộc tính wtih XML thay vì các yếu tố cho các loại đơn giản (tên / giá trị)
Matthew Whited

4
@Matthew: Vâng, nhưng sau đó nó trông không nhất quán và xấu xí. Và bạn vẫn cần các thẻ mở / đóng cho phần tử. JSON (tốt nhất) giảm một nửa số lượng thẻ bạn cần sử dụng.
Ron Gejman

2
Nhìn vào ví dụ của Marc. Tôi không thấy phiên bản của bạn dễ đọc hơn phiên bản của anh ấy. stackoverflow.com/questions/1743532/ Mạnh
Matthew Whited

1
sự khác biệt là chiều dài dường như không quá lớn đối với tôi
vtd-xml-tác giả

28

Chỉ là một giai thoại từ kinh nghiệm cá nhân của riêng tôi:

Tôi đã viết một thư mục Javascript nhỏ, đầu tiên là với dữ liệu bằng XML và sau đó điều chỉnh nó để sử dụng JSON để tôi có thể chạy chúng cạnh nhau và so sánh tốc độ với Fireorms. JSON kết thúc nhanh hơn khoảng 3 lần (350-400 ms so với 1200-1300 ms để hiển thị tất cả dữ liệu). Ngoài ra, như những người khác đã lưu ý, JSON dễ nhìn hơn nhiều và kích thước tệp nhỏ hơn 25% do đánh dấu gọn hơn.


2
Nếu mọi người tạo ra các điểm chuẩn này, chúng tôi sẽ không có gì để tranh cãi.
HDave

20
 <colors>
      <color name='red'     value='#f00'/>
      <color name='green'   value='#0f0'/>
      <color name='blue'    value='#00f'/>
      <color name='cyan'    value='#0ff'/>
      <color name='magenta' value='#f0f'/>
      <color name='yellow'  value='#ff0'/>
      <color name='black'   value='#000'/>
 </colors>

Với các thuộc tính, XML là tốt. Nhưng vì một số lý do, XML sản xuất tại nhà thường được làm bằng 100% các yếu tố và xấu.


2
Đó vẫn là nhiều ký tự không phải khoảng trắng hơn ví dụ JSON. Và các thuộc tính phân tích cú pháp có thể gây khó chịu hơn trong XML.
jmucchiello

4
Có lẽ bởi vì các loại phức tạp thực sự chỉ có thể được mô tả trong các phần tử sao cho hầu hết các công cụ mặc định. Tôi đồng ý rằng XML này rất đơn giản để sử dụng và đọc.
Matthew Whited

18

Tiêu thụ dễ dàng bằng JavaScript có thể là một trong những lý do ..


6
Đó là lý do lớn tôi sử dụng nó. Phân tích cú pháp xml bằng tay rất phức tạp. Ngoài ra, vì tôi sử dụng Python để tạo JSON ở vị trí đầu tiên, chúng xử lý dữ liệu và đối tượng theo cách rất giống nhau, có nghĩa là tuần tự hóa qua lại khiến mọi thứ đều vui vẻ!
RandomInsano

10

JSON là tốt nhất để tiêu thụ dữ liệu trong các ứng dụng web từ dịch vụ web vì kích thước và dễ sử dụng, đặc biệt là do hỗ trợ tích hợp trong JavaScript . Hãy tưởng tượng chi phí tính toán để phân tích một đoạn xml so với tra cứu tức thời trong JSON.

Một ví dụ rất hay là JSON-P. Bạn có thể lấy lại dữ liệu từ dịch vụ web được gói trong lệnh gọi hàm gọi lại, như my_callback({"color": "blue", "shape":"square"});bên trong <script>thẻ được tạo động để dữ liệu có thể được tiêu thụ trực tiếp trong hàmmy_callback() . Không có cách nào để tiến gần đến sự thuận tiện này bằng XML.

XML sẽ là định dạng được lựa chọn cho các tài liệu lớn, nơi bạn có khung kết xuất các trang dữ liệu theo nhiều định dạng bằng XSLT. XML cũng có thể được sử dụng với các tệp cấu hình ứng dụng để dễ đọc trong số nhiều mục đích sử dụng khác.


8

Không ai ở đây đã đề cập đến lợi thế chính của XML: quy tắc xác thực (DTD, XSD). Kết luận của tôi, đã sử dụng cả hai:

  • JSON là hoàn hảo cho ajax, đặc biệt nếu bạn tự phát triển cả máy chủ và máy khách. Về cơ bản bạn tạo các đối tượng js ngay trong tập lệnh máy chủ của bạn!
  • XML tỏa sáng trong môi trường doanh nghiệp, khi bạn phải thiết lập các tiêu chuẩn trao đổi dữ liệu giữa các tổ chức quan liêu lớn. Thông thường, một bên phát triển một phần của mình trước một tháng khác, vì vậy họ thực sự được hưởng lợi từ việc xác thực các yêu cầu của mình đối với XSD đã thỏa thuận. Ngoài ra, trong các tập đoàn lớn, truyền dữ liệu thường được dịch giữa các hệ thống khác nhau. Đây cũng là thế mạnh của XML, hãy nghĩ XSLT. Ví dụ: chuyển đổi không có mã thành JSON: p

Tất nhiên, có lược đồ json đang được phát triển nhưng bạn sẽ không tìm thấy hỗ trợ tích hợp cho nó ở bất cứ đâu.

Tôi là một fanboy của cả hai, họ chỉ có những điểm mạnh khác nhau.


6

Bây giờ có hầu hết các bộ mã hóa và giải mã JSON cho hầu hết các ngôn ngữ, không có lý do gì KHÔNG sử dụng JSON cho các mục đích sử dụng hợp lý (và đó có thể là 90% các trường hợp sử dụng cho XML).

Tôi thậm chí đã nghe nói về các chuỗi JSON được sử dụng trong các cơ sở dữ liệu SQL lớn để thay đổi lược đồ dễ dàng hơn.


5

Thành thật mà nói, không có quá nhiều sự khác biệt giữa JSON và XML trong thực tế là chúng có thể đại diện cho tất cả các loại dữ liệu. Tuy nhiên, XML về mặt cú pháp lớn hơn JSON và điều đó làm cho nó nặng hơn JSON.


1
không tìm thấy câu trả lời của bạn đặc biệt truyền cảm hứng, nhưng nó không sai nên việc bỏ phiếu có vẻ không công bằng.
deft_code

+1 để nói rằng XML có thể được sử dụng theo cách để trở thành một siêu bộ thích hợp của JSON.
Sebastian

5

JSON không có trở kháng không khớp với lập trình JavaScript. JSON có thể chứa số nguyên, chuỗi, danh sách, mảng. XML chỉ là các phần tử và các nút cần được phân tích cú pháp thành các số nguyên và cứ thế trước khi nó có thể được sử dụng.


Sự cần thiết phải phân tích các mục không tương đương với một sự không phù hợp trở kháng.
Cướp

9
Sự không phù hợp trở kháng là khi các khái niệm không ánh xạ rõ ràng từ định dạng này sang định dạng khác, như với ánh xạ quan hệ đối tượng. Một số thứ rất dễ thể hiện với các đối tượng nhưng khó với SQL trong khi những thứ khác dễ thể hiện bằng SQL, nhưng hệ thống phân cấp đối tượng có một thời gian khó diễn đạt chúng rõ ràng. Với XML và JSON, người ta thường đòi hỏi một chút công việc để hiểu ý nghĩa hơn cái kia, nhưng điều đó thực sự phụ thuộc vào các công cụ phân tích cú pháp. Tính biểu cảm là (hầu hết) giống nhau.
jcdyer

4

Cả hai đều tuyệt vời và rất di động. Tuy nhiên, JSON đã trở nên phổ biến vì nó tuần tự hóa thành ít ký tự hơn trong hầu hết các trường hợp (chuyển thành thời gian phân phối nhanh hơn) và vì nó phù hợp với cú pháp đối tượng JavaScript, nên nó có thể được dịch trực tiếp thành một đối tượng trong bộ nhớ giúp Ajax dễ dàng hơn rất nhiều triển khai thực hiện.

XML vẫn còn tuyệt vời. JSON chỉ là "mới nhất và lớn nhất" so với XML.


1
Và tôi tin rằng các bản sửa đổi mới hơn của JavaScript đang bắt đầu bao gồm các bộ mã hóa và giải mã JSON tích hợp "an toàn" (không có eval).
Nosredna

4

Dễ dàng phân tích cú pháp bởi JavaScript và nó rất nhẹ (một tài liệu trong JSON nhỏ hơn một tài liệu XML có chứa cùng một dữ liệu.)


3

JSON được JavaScript tuần tự hóa một cách hiệu quả ở chỗ bạn có thể eval (aJsonString) trực tiếp thành một đối tượng JavaScript. Bên trong trình duyệt, JSON không có trí tuệ hoàn toàn phù hợp với JavaScript. Đồng thời, JavaScript là một ngôn ngữ động được gõ rất lỏng lẻo và không thể tận dụng tất cả các thông tin loại cụ thể có trong tài liệu Xml / Xsd. Siêu dữ liệu bổ sung này (rất tốt cho khả năng tương tác) là một trở ngại trong JavaScript khiến nó trở nên tẻ nhạt và lập phương hơn khi làm việc.

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

Nếu bạn đang ở trong trình duyệt, JSON sẽ nhanh hơn để tuần tự hóa / giải tuần tự hóa vì nó đơn giản hơn, gọn hơn và quan trọng hơn là được hỗ trợ. 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 bộ nối tiếp khác nhau có sẵn. Trong Thư viện lớp cơ sở Trình tuần tự hóa DataContract XML của Microsoft nhanh hơn 30% so với JSON của họ. Mặc dù đây có nhiều việc phải làm với các nỗ lực của Microsoft đưa vào serializer XML của họ như là tôi đã có thể phát triển một JsonSerializer đó là hơn 2.6 lần nhanh hơn so với một XML của họ. Đối với trọng tải dựa trên các tiêu chuẩn có vẻ như XML là khoảng hơn 2xkích thước của JSON. Tuy nhiên, điều này có thể nhanh chóng thổi bay nếu tải trọng XML của bạn sử dụng nhiều không gian tên khác nhau trong cùng một tài liệu.


2

XML là dầu rắn cồng kềnh trong hầu hết các tình huống. JSON cung cấp cho bạn hầu hết các lợi ích mà không cần sự phình to.


1

Một lợi thế lớn khác ngoài những người được đề cập ở đây. Đối với cùng một dữ liệu, có nhiều cách để biểu thị nó dưới dạng tệp XML nhưng chỉ có một cách với JSON, loại bỏ sự mơ hồ :)


2
{"colors":["red","green","blue"],"systems":["windows","mac"]}so với{"entries":[{"type":"color","value":"red"},{"type":"system","value":"mac"}]}
Jerome Baum

0

Tôi không phải là chuyên gia nhưng từ các công ty khác nhau mà tôi đã làm việc cho chúng tôi thường sử dụng XML trong các môi trường dữ liệu nhỏ hoặc các giá trị cấu hình (web.config là một ví dụ tuyệt vời).

Khi bạn có một lượng lớn dữ liệu, nói chung, bạn sẽ muốn báo cáo về dữ liệu đó. Và XML không phải là một nguồn tuyệt vời để báo cáo. Trong sơ đồ lớn của mọi thứ, có vẻ như một cơ sở dữ liệu giao dịch dễ báo cáo / tìm kiếm hơn so với XML.

Điều này có nghĩa không? Như tôi đã nói ở trên, tôi không phải là chuyên gia nhưng theo kinh nghiệm của tôi thì đây có vẻ là trường hợp. Ngoài ra, tôi tin rằng Microsoft tích hợp hỗ trợ JSON do làn sóng các nhà phát triển chuyển sang các hành động phía máy khách hoặc kịch bản để nâng cao hình ảnh của UI ( Ajax ) và Ajax của Microsoft đã không được sử dụng nhiều như các thư viện khác như jQuery và MooTools ( YUI của Yahoo cũng nằm trong hỗn hợp đó) do sự tích hợp đẹp mắt của các đối tượng tuần tự hóa bằng JSON.

Tôi thấy mình đang viết mã hiện đang triển khai bộ tuần tự JSON trong mã VB của mình. Đó là cách quá dễ dàng và từ quan điểm nâng cấp / sửa đổi, bạn không thể đánh bại nó. Tôi đoán đó là cách khiến chúng tôi nghiện VS tôi đoán. Gần đây tôi đã chuyển đổi một ứng dụng doanh nghiệp sang sử dụng Ajax (thông qua jQuery) và sử dụng định dạng JSON. Phải mất khoảng 2 tuần để làm như vậy. Tôi thực sự cảm ơn Microsoft vì đã tích hợp nó bởi vì nếu không có nó, tôi sẽ phải viết thêm một chút mã.


Tôi nghĩ rằng có một số nhầm lẫn về câu hỏi và câu trả lời này chứa rất nhiều suy đoán.
ba75

@Eric P: hoàn toàn không có gì sai với VB.
Taptronic
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.