Dừng so sánh JSON và XML


Võ Kim Ngọc
4 năm trước
Hữu ích 2 Chia sẻ Viết bình luận 0
Đã xem 8320

JSON hay XML? Cái nào tốt hơn? Cái nào nhanh hơn? Tôi nên sử dụng cái nào trong dự án tiếp theo của tôi? Dừng lại đi! Những điều này không thể so sánh được. Nó tương tự như so sánh một chiếc xe đạp và một chiếc AMG S65 . Nghiêm túc mà nói, cái nào tốt hơn? Cả hai đều có thể đưa bạn từ nhà đến văn phòng, phải không? Trong một số trường hợp, một chiếc xe đạp sẽ làm điều đó tốt hơn. Nhưng điều đó có nghĩa là họ có thể được so sánh với nhau? Điều tương tự cũng áp dụng ở đây với JSON và XML. Họ là những thứ rất khác nhau với các lĩnh vực ứng dụng riêng của họ.

Đây là cách một đoạn dữ liệu JSON đơn giản có thể trông (140 ký tự):

{
  "id": 123,
  "title": "Object Thinking",
  "author": "David West",
  "published": {
    "by": "Microsoft Press",
    "year": 2004
  }
}

Một tài liệu tương tự sẽ trông như thế này trong XML (167 ký tự):

<?xml version="1.0"?>
<book id="123">
  <title>Object Thinking</title>
  <author>David West</author>
  <published>
    <by>Microsoft Press</by>
    <year>2004</year>
  </published>
</book>

Trông dễ so sánh, phải không? Ví dụ đầu tiên ngắn hơn một chút, dễ hiểu hơn vì nó ít "khó hiểu" hơn và cũng có thể phân tích cú pháp hoàn hảo trong JavaScript. Thế là xong rồi; hãy sử dụng JSON và biểu hiện cái chết của XML! Ai cần XML 15 tuổi hạng nặng này ngay từ đầu?

Vâng, tôi cần nó, và tôi yêu nó. Hãy để tôi giải thích tại sao.

Và đừng hiểu lầm tôi; Tôi không chống lại JSON. Không có gì. Đây là một định dạng dữ liệu tốt . Nhưng nó chỉ là một định dạng dữ liệu. Chúng tôi đang sử dụng tạm thời để chuyển một phần dữ liệu từ điểm A sang điểm B. Thật vậy, nó ngắn hơn XML và dễ đọc hơn. Đó là nó.

XML không phải là một định dạng dữ liệu; nó là một ngôn ngữ . Một thứ rất mạnh mẽ. Hãy để tôi chỉ cho bạn những gì nó có khả năng. Hãy để tôi giải thích cơ bản tại sao tôi yêu nó. Và tôi thực sự khuyên bạn nên đọc XML bằng một bản tóm tắt, Ấn bản thứ ba của Elliotte Rusty Harold và W. Scott Means.

Tôi tin rằng có bốn tính năng mà XML nghiêm túc đặt nó ngoài JSON hoặc bất kỳ định dạng dữ liệu đơn giản nào khác, như YAML chẳng hạn.

  • XPath . Để có được dữ liệu như năm xuất bản từ tài liệu trên, tôi chỉ cần gửi truy vấn XPath : /book/published/year/text(). Tuy nhiên, phải có bộ xử lý XPath hiểu yêu cầu của tôi và trả về 2004. Cái hay của việc này là XPath 2.0 là một công cụ truy vấn rất mạnh với các chức năng, vị từ, trục, v.v. Bạn có thể đặt bất kỳ logic nào vào yêu cầu XPath của mình mà không cần viết bất kỳ logic nào trong Java. Bạn có thể hỏi "Có bao nhiêu cuốn sách được David West xuất bản năm 2004?" và nhận được câu trả lời, chỉ qua XPath. JSON thậm chí không gần với điều này.
  • Các thuộc tính và không gian tên . Bạn có thể đính kèm siêu dữ liệu vào dữ liệu của mình, giống như nó được thực hiện ở trên với idthuộc tính. Dữ liệu nằm trong các yếu tố, ví dụ như tên của tác giả sách, trong khi siêu dữ liệu (dữ liệu về dữ liệu) có thể và nên được đặt vào các thuộc tính. Điều này giúp đáng kể trong việc tổ chức và cấu trúc thông tin. Trên hết, cả hai yếu tố và thuộc tính có thể được đánh dấu là thuộc về không gian tên nhất định . Đây là một kỹ thuật rất hữu ích trong thời gian khi một vài ứng dụng hoạt động với cùng một tài liệu XML.
  • Lược đồ XML . Khi bạn tạo một tài liệu XML ở một nơi, sửa đổi nó một vài lần ở một nơi khác và sau đó chuyển nó đến một nơi khác, bạn muốn đảm bảo cấu trúc của nó không bị phá vỡ bởi bất kỳ hành động nào trong số này. Một trong số chúng có thể sử dụng <year>để lưu trữ ngày xuất bản trong khi một số khác sử dụng <date>với ISO-8601. Để tránh sự lộn xộn trong cấu trúc, hãy tạo một tài liệu bổ sung, được gọi là Lược đồ XML và gửi nó cùng với tài liệu chính. Mọi người muốn làm việc với tài liệu chính trước tiên sẽ xác nhận tính đúng đắn của nó bằng cách sử dụng lược đồ được cung cấp. Đây là một loại thử nghiệm tích hợp trong sản xuất. RelaxNG là một cơ chế tương tự nhưng đơn giản hơn; hãy dùng thử nếu bạn thấy Lược đồ XML quá phức tạp.
  • XSL . Bạn có thể thực hiện các sửa đổi cho tài liệu XML của mình mà không cần bất kỳ Java / Ruby / etc. mã ở tất cả. Chỉ cần tạo một tài liệu chuyển đổi XSL và "áp dụng" nó vào XML gốc của bạn. Là một đầu ra, bạn sẽ nhận được một XML mới. Bằng cách này, ngôn ngữ XSL (hoàn toàn là chức năng) được thiết kế cho các thao tác dữ liệu phân cấp. Nó phù hợp hơn nhiều cho nhiệm vụ này so với Java hoặc bất kỳ phương pháp tiếp cận thủ tục / OOP nào khác. Bạn có thể chuyển đổi một tài liệu XML thành bất cứ thứ gì, kể cả văn bản thuần túy và HTML . Một số người phàn nàn về sự phức tạp của XSL, nhưng vui lòng thử lại. Bạn sẽ không cần tất cả, trong khi chức năng cốt lõi của nó khá đơn giản.

Đây không phải là một danh sách đầy đủ, nhưng bốn tính năng này thực sự có ý nghĩa rất lớn đối với tôi. Họ cung cấp cho tài liệu của tôi khả năng "tự túc". Nó có thể tự xác nhận (Lược đồ XML), nó biết cách tự sửa đổi (XSL) và nó cho phép tôi truy cập rất thuận tiện vào mọi thứ bên trong nó (XPath).

nhiều ngôn ngữ, tiêu chuẩn và ứng dụng được phát triển xung quanh XML, bao gồm XForms , SVG , MathML , RDF , OWL , WSDL , v.v. Nhưng bạn ít có khả năng sử dụng chúng trong một dự án chính thống, vì chúng khá "thích hợp".

JSON không được thiết kế để có các tính năng như vậy, mặc dù một số trong số chúng hiện đang cố gắng tìm vị trí của chúng trong thế giới JSON, bao gồm JSONPath để truy vấn, một số công cụ để chuyển đổi và lược đồ json để xác thực. Nhưng chúng chỉ là những nhại yếu so với những gì XML cung cấp và tôi không nghĩ chúng có tương lai. Hoặc hãy để nó theo cách này: tôi ước họ sớm biến mất. Họ chỉ biến một định dạng tốt, đơn giản thành một cái gì đó vụng về .

Do đó, để kết luận, JSON là một định dạng dữ liệu đơn giản không có chức năng bổ sung. Trường hợp sử dụng tốt nhất của nó là AJAX . Trong tất cả các trường hợp khác, tôi thực sự khuyên bạn nên sử dụng XML.

Hữu ích 2 Chia sẻ Viết bình luận 0
Đã xem 8320