Nếu bạn đang làm việc trong Javascript, chúng tôi sẽ dễ dàng hơn nhiều với JSON. Điều này là do JSON có thể được đánh giá trực tiếp vào một đối tượng Javascript, dễ dàng hơn nhiều so với DOM.
vay và hơi thay đổi XML và JSON từ trên
XML:
<person>
<name>John Doe</name>
<tag>friend</tag>
<tag>male</tag>
</person>
JSON:
{ person: {"name": "John Doe", "tag": ["friend", "male"]} }
Nếu bạn muốn để có được những đối tượng thẻ thứ hai với XML, bạn sẽ cần phải sử dụng apis DOM mạnh mẽ nhưng tiết:
var tag2=xmlObj.getElementsByTagName("person")[0].getElementsByTagName("tag")[1];
trong khi với một đối tượng Javascript đi kèm trong thông qua JSON, bạn chỉ có thể sử dụng:
var tag2=jsonObj.person.tag[1];
Tất nhiên, Jquery làm cho ví dụ DOM đơn giản hơn nhiều:
Tuy nhiên, JSON vừa "vừa" trong một thế giới Javascript. Nếu bạn làm việc với nó một lúc, bạn sẽ thấy rằng bạn có ít chi phí tinh thần hơn nhiều so với dữ liệu dựa trên XML.
Tất cả các ví dụ trên đều bỏ qua khả năng một hoặc nhiều nút khả dụng, được sao chép hoặc khả năng nút đó chỉ có một hoặc không có con. Tuy nhiên, để minh họa cho bản địa-Ness của JSON, để làm điều này với jsonObj, bạn sẽ chỉ phải:
var tag2=(jsonObj.person && jsonObj.person.tags && jsonObj.person.tags.sort && jsonObj.person.tags.length==2 ? jsonObj.person.tags[1] : null);
(một số người có thể không thích điều đó dài ternary, nhưng nó hoạt động). Nhưng XML sẽ là (theo ý kiến của tôi) nastier (Tôi không nghĩ rằng bạn muốn đi theo cách tiếp cận thứ ba vì bạn cứ tiếp tục gọi các phương thức dom có thể phải thực hiện lại công việc tùy thuộc vào việc thực hiện):
var tag2=null;
var persons=xmlObj.getElementsByTagName("person");
if(persons.length==1) {
var tags=persons[0].getElementsByTagName("tag");
if(tags.length==2) { tag2=tags[1]; }
}
jquery (chưa được kiểm tra):
var tag2=$("person:only-child tag:nth-child(1)",xmlObj).get(0);
tôi nghe nói họ sẽ đổi tên XML để OEML (Over Engineered Markup Language) –
như thế nào JSON xử lý bảng mã ký tự khác nhau (như XML không). Có một mã hóa ký tự ngầm trong một biểu diễn JSON không? –
Cho phép lấy dữ liệu từ một miền khác không thực sự là một tính năng vốn có với định dạng XML hoặc JSON * *. Đó là một thứ liên quan đến trình duyệt. –