2010-10-19 39 views
7

đây có thể là một câu hỏi rất cơ bản, nhưng có vẻ như không dễ để tìm câu trả lời. Tôi có một Json, ít nhiều cũng giống như:Javascript JsON nhận tên đối tượng thành viên

languages = { 
"aa":{"iso639-2T":"aar","family":"Afro-Asiatic","labels":{"language_names":["Afar"],"native_names":["Afaraf"]}}, 
"ab":{"iso639-2T":"abk","family":"Northwest Caucasian","labels":{"language_names":["Abkhaz"],"native_names":["\u0430\u04a7\u0441\u0443\u0430"]}}, 
"af":{"iso639-2T":"afr","family":"Indo-European","labels":{"language_names":["Afrikaans"],"native_names":["Afrikaans"]}}, etc...etc... } 

nếu bạn thấy json ở trên, có nhiều đối tượng ngôn ngữ bên trong biến ngôn ngữ. và mỗi đối tượng ngôn ngữ có tên riêng của nó như là mã định danh của nó ("aa", "ab", "af")

vì vậy, câu hỏi của tôi là, cách nhận các mã định danh đó ("aa", "ab", " af ") nếu tôi muốn liệt kê tất cả các ngôn ngữ đó trong html? ví dụ. nếu tôi muốn tạo ra giống như một combo box (<option value="aa">Afar</option><option value="ab">Abkhaz</option><option value="af">Afrikaans</option>)

thực sự những gì tôi muốn đạt được là một cái gì đó như thế này (trong php)

$sampleArray = Array("aa" => "Afar", "ab" => "Abkhaz", "af" => "Afrikaans"); foreach($sampleArray as $id => $value){ /* I can get the id from $id*/} 

là có bất kỳ giải pháp tương tự như cú pháp php trên cho json của tôi trong java script?

ps. nếu bạn đang tự hỏi tại sao tôi không sử dụng mảng - Tôi chỉ nghĩ rằng nó sẽ dễ dàng hơn để lấy đối tượng ngôn ngữ nhất định (im chỉ cần làm một cái gì đó như: languages["af"] để có được ngôn ngữ) thay vì tôi nên làm: vòng lặp thông qua toàn bộ ngôn ngữ đối tượng và kiểm tra từng người một nếu id là những gì tôi muốn, và sau đó trả lại nó. - bạn có thể cho tôi một gợi ý cho điều này nếu các bạn có một ý tưởng tốt hơn :)

Best Regards,

+0

vĩ đại này là câu trả lời rất nhanh hahaha, nhờ chàng trai đã giúp tôi ra! * xem bên dưới để biết câu trả lời :) – AnD

Trả lời

6

này nên làm những gì bạn muốn ..

để xem họ

for (var lang in languages) 
    alert(lang + ' : ' + languages[lang].labels.language_names[0]); 

để đặt chúng trong DOM

var $select = $('selector to your select element'); 
for (var lang in languages) 
    $select.append('<option value="'+lang+'">' + languages[lang].labels.language_names[0] + '</option>'); 

đang làm việc tại http://www.jsfiddle.net/EsJAh/

+0

'cảnh báo (lang + ':' + ngôn ngữ [lang] .labels.language_names [0]'? –

+0

@james, đẹp bắt .. bỏ lỡ mảng đó .. cố định trong câu trả lời –

+0

Tuyệt vời! Đây là chính xác những gì tôi muốn :) cảm ơn dude :) – AnD

3

Bạn có thể sử dụng "cho"

for (var key in languages) 
{ 
alert(key); 
} 
2
var data = new Array(); 
for(var lang in languages) { 
    data[lang] = languages[lang]; 
} 
+0

Sử dụng 'Mảng' ở đây là sai. Bạn nên sử dụng '{}' aka 'new Object()', có nó cũng làm việc với Array, nhưng đó chỉ là vì bạn đang thiết lập các thuộc tính trên đối tượng Array, bạn đang thực tế không thiết lập bất cứ thứ gì trong mảng :) –

+0

@ Ivo - Tôi hoàn toàn đồng ý với bạn. Nó chỉ có vẻ như OP đã có những gì anh ta đang tìm kiếm trong các đối tượng ngôn ngữ. Vì vậy, tôi figured tôi muốn cho anh ta cái gì khác. – mellowsoon

+0

Tôi vẫn không hiểu tại sao nó sai khi sử dụng mảng? – AnD

2

Bạn đã thử:

languages['af'].labels.language_names[0] 

Nó sẽ trở lại Afrikaans

+0

Tôi nghĩ trong ví dụ này, anh ấy không có 'af' ngay từ đầu. Đó là những gì anh ta đang cố gắng để có được. – Keyslinger

0

Nếu bạn đang sử dụng jquery, thì bạn có thể làm mình thực sự:

$.each(languages, function(k, v){ 
     alert("Key: " + k + ", Value: " + v); 
     // value is your particular language object based on k variable 
}); 

:)

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