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.