2013-08-22 75 views
13

Mảng JSON có thể chứa các đối tượng của các cặp khóa/giá trị khác nhau. Từ this tutorial, ví dụ đưa ra cho mảng JSON bao gồm các đối tượng của cùng một cặp khóa/giá trị:Mảng JSON có thể chứa các đối tượng của các cặp khóa/giá trị khác nhau không?

{ 
"example": [ 
{ "firstName":"John" , "lastName":"Doe" }, 
{ "firstName":"Anna" , "lastName":"Smith" }, 
{ "firstName":"Peter" , "lastName":"Jones" } 
] 
} 

Nếu tôi muốn thay đổi nó để có cặp khóa/giá trị khác nhau bên trong mảng JSON, là những điều sau đây vẫn còn là một JSON hợp lệ?

{ 
"example": [ 
{ "firstName":"John", "lastName":"Doe" }, 
{ "fruit":"apple" }, 
{ "length":100, "width":60, "height":30 } 
] 
} 

Chỉ muốn xác nhận điều này. Nếu vậy, làm cách nào tôi có thể sử dụng JavaScript để biết trường JSON "example" có chứa các đối tượng đồng nhất đầu tiên hoặc các đối tượng không đồng nhất thứ hai không?

+3

Có, mảng json có thể chứa bất kỳ chuỗi json hợp lệ nào: các đối tượng với các cặp khóa/giá trị khác nhau, các mảng khác, số, chuỗi, booleans tất cả trong cùng một mảng. – arnaud576875

+0

vào đây để kiểm tra bất kỳ javascript bạn muốn: http://jsconsole.com/ – dmoss18

+0

Không chỉ nó là khá cũ, thực hành nó hỗ trợ đã sai đã 13 năm trước khi bài viết được xuất bản. –

Trả lời

11

Bạn có thể sử dụng bất kỳ cấu trúc nào bạn muốn. JSON không phải là lược đồ dựa trên cách XML thường được sử dụng và Javascript không được gõ tĩnh.

bạn có thể chuyển đổi JSON của bạn để một đối tượng sử dụng JS JSON.parse và sau đó chỉ cần kiểm tra sự tồn tại của tài sản

var obj = JSON.parse(jsonString); 
if(typeof obj.example[0].firstName != "undefined") { 
    //do something 
} 
+0

Cảm ơn. Cách tốt nhất để kiểm tra xem mảng JSON có chứa các đối tượng đồng nhất hay không? – tonga

+1

@tonga bạn sẽ không thể kiểm tra tính đồng nhất của mảng theo cách đó. Bạn chỉ có thể biết nếu mảng là đồng nhất cho đến khi bạn xử lý xong tất cả các mục của nó –

+0

câu trả lời là đúng, nhưng câu lệnh về XML là không đúng ... XML dựa trên một đặc tả nổi tiếng và định nghĩa rất rõ ràng nhưng bạn nếu bạn muốn sử dụng một lược đồ hay không, một tùy chọn của nó. –

5

Việc bạn có thể trộn và kết hợp bao nhiêu tùy thích cũng không thành vấn đề.

Bạn chỉ có thể kiểm tra nó

typeof someItem.example !== 'undefined' // True if `example` is defined. 
+0

Cảm ơn. Cách tiếp cận này có thể kiểm tra nếu mảng chứa các đối tượng đồng nhất hay không? Cách tốt nhất để kiểm tra tính đồng nhất của một mảng JSON bằng JavaScript là gì? – tonga

+1

@tonga nó sẽ lặp lại nó. –

+0

Vì vậy, không có hàm JS tích hợp sẵn để kiểm tra mảng? – tonga

1

Đó là JSON hoàn toàn hợp lệ. Cá nhân tôi thích cú pháp này tốt hơn, bởi vì nó đọc dễ dàng hơn:

{ 
    "example": [ 
     { 
      "firstName": "John", 
      "lastName": "Doe" 
     }, 
     { 
      "fruit": "apple" 
     }, 
     { 
      "length": 100, 
      "width": 60, 
      "height": 30 
     } 
    ] 
} 

Như để trả lời câu hỏi thứ hai của bạn, bạn có thể đọc dữ liệu từ một chuỗi JSON bằng cách sử dụng var data = JSON.parse(datastring);. Sau đó, chỉ cần sử dụng nó bằng cách gọi data.property.secondlevel. Bất kỳ biến nào cũng có thể là một đối tượng, mảng, chuỗi hoặc số, cho phép cấu trúc lồng nhau.

+0

Nếu bạn downvote, hãy cho tôi ít nhất biết _why_. Tôi đã đọc câu hỏi và không thấy điểm giảm giá này? – Broxzier

+0

Có thể đề xuất chỉnh sửa cho câu hỏi gốc để định dạng lại? Không phải của tôi downvote mặc dù ... – hurrymaplelad

1

Bạn có thể tự do làm những gì bạn muốn với những nội dung của mảng. Jus nhớ về điều này trước khi bạn cố gắng lặp lại một thuộc tính truy cập của mỗi mục trong mảng của bạn.

một điều: bạn sẽ không thể deserialize điều này để bất cứ điều gì khác hơn là một mảng của đối tượng ở phía máy chủ của bạn, do đó, không có bất ngờ sau đó.

làm gợi ý, có thể bạn có thể bao gồm trường chung trong các đối tượng chỉ định "loại" để sau này dễ xử lý.

var array = [{"type":"fruit", "color":"red"}, 
{"type":"dog", "name":"Harry"}]; 

var parser = { 
    fruit:function(f){ 
    console.log("fruit:" + f.color); 
    }, 
    dog: function(d){ 
    console.log("dog:"+d.name); 
    }}; 

for(var i=0;i<array.length;i++){ 
    parser[array[i].type](array[i]); 
} 
Các vấn đề liên quan