2010-06-11 23 views
20

Tôi đang sử dụng PHP để json mã hóa một mảng đa chiều lớn các sự kiện, vì vậy tôi có được một cái gì đó như thế này:làm thế nào để tôi biết một đối tượng JSON lớn có chứa một giá trị không?

var ents = {"7":{"event_id":"7","nn":"The Whisky Drifters","nn_url":"the-whisky-drifters", 
    "venue":"The Grain Barge","date_num":"2010-06-11","date_txt":"Friday 11th June", 
    "gig_club":"1","sd":"A New Acoustic String Band...","ven_id":"44", 
    "art":0},"15":{"event_id":"15","nn":"Bass Kitchen","nn_url":"bass-kitchen", 
    "venue":"Timbuk2","date_num":"2010-06-11","date_txt":"Friday 11th June", 
    "gig_club":"2","sd":"Hexadecimal \/ DJ Derek \/ Id","ven_id":"21", 
    "art":1}, 

chiều đầu tiên là id, xem

var ents = {"7":{ 

Vì vậy, nó là có thể lấy các id mà không kiểm tra các đối tượng lồng nhau ...

Cách nhanh nhất, hiệu quả nhất để kiểm tra xem JSON của tôi có chứa id không?

Trả lời

45

Bạn có thể sử dụng phương pháp hasOwnProperty:

if (ents.hasOwnProperty('7')) { 
    //.. 
} 

phương pháp này kiểm tra nếu đối tượng chứa thuộc tính quy định không phân biệt giá trị của nó.

Nhanh hơn nhà điều hành in vì nó không kiểm tra các thuộc tính được kế thừa.

+0

@ Haroldo, bạn chỉ muốn kiểm tra xem một id cụ thể (thuộc tính cấp đầu tiên) có thoát phải không? hoặc bạn muốn trích xuất tất cả các tên thuộc tính đó? – CMS

+0

chỉ cần kiểm tra nếu id tồn tại – Haroldo

2

Bên cạnh đó với những gì CMS cho biết: Nếu bạn cần tất cả các thuộc tính, bạn có thể lặp qua porperties với for ... in:

for (prop in ents) { 
    alert(prop); // Shows "7", "15", etc. 
    // Accessing the sub-object: 
    alert(ents[prop].nn); // Shows the names of each event 
} 

Ngoài ra đó không phải là một "mảng đa chiều". Đó là một đối tượng (với nhiều đối tượng lồng nhau).

+0

nó là một mảng đa chiều khi nó ở trong PHP trừ khi tôi nhầm – Haroldo

2

có thể, nhưng bạn phải lặp qua đối tượng json hoàn chỉnh ở phía máy khách.

var JSONobj = ents, yourid; 
for(key in JSONobj) 
{ 
    if(((typeof key) == 'number') && key==yourid) 
     alert(key); 
} 

nếu bạn đang sử dụng jQuery thì bạn có thể sử dụng $ .each phương pháp để fetchng phím từ JSONObject

var JSONobj = ents, yourid; 
     $.each(JSONobj, function(key, value){  
      if(((typeof key) == 'number') && key==yourid) 
       alert(key); 
      //ids.push(key); 
     }); 
+0

nó sẽ hiệu quả hơn để kiểm tra xem giá trị có phải là số nguyên không trước khi xem nó có khớp với id truy vấn của tôi hay không bạn nghĩ rằng im tốt hơn có một đối tượng riêng biệt chỉ là id? – Haroldo

+0

bạn có thể thêm cả hai kiểm tra trong một dòng tức là nếu (((typeof key) == 'số') && key == yourid) thì bạn sẽ không cần một mảng để giữ tất cả các id. –

-1

Chỉ cần sử dụng myObject.has("keyName"). Đây là những gì thực sự hoạt động.

+0

Không! Object.has không phải là một hàm. Chỉ cần thử nó, và MDN không đề cập đến nó: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object Vì vậy, nó không phải là "những gì thực sự hoạt động". – Andrew

Các vấn đề liên quan