2010-10-19 13 views
7

to może być bardzo podstawowe pytanie, ale wydaje się, że nie jest łatwo znaleźć odpowiedź. Mam JSON, mniej lub bardziej przypomina:JavaScript JsON uzyskać nazwę członka obiektu

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... } 

jeśli widzisz json powyżej, istnieje kilka obiekt język wewnątrz zmiennej języków. a każdy obiekt językowy ma własną nazwę jako jego identyfikator ("aa", "ab", "af")

tak więc, moim pytaniem jest, jak uzyskać ten identyfikator ("aa", "ab", " af ") jeśli chcę wyświetlić wszystkie te języki w html? na przykład. jeśli chcę tworzyć jak pola kombi (<option value="aa">Afar</option><option value="ab">Abkhaz</option><option value="af">Afrikaans</option>)

faktycznie co chcę osiągnąć jest coś takiego (w PHP)

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

Czy istnieje jakieś rozwiązanie podobne jak php składni powyżej dla mojego json w skrypt java?

ps. jeśli zastanawiasz się, dlaczego nie używam tablicy - myślę, że łatwiej będzie chwycić pewien obiekt językowy (im po prostu zrobić coś takiego: languages["af"], aby uzyskać język afrikaans), a nie powinienem zrobić: zapętlić cały język obiekt i sprawdź jeden po drugim, jeśli id ​​jest tym, czego chcę, a następnie zwróć go. - możesz dać mi jeszcze jedną sugestię do tego, jeśli macie lepszy pomysł :)

poważaniem,

i

+0

Wielki to bardzo szybka odpowiedź hahaha, chłopaki dzięki za pomoc mnie! * patrz poniżej, aby uzyskać odpowiedź :) – AnD

Odpowiedz

6

powinno to robić co chcesz ..

aby zobaczyć je

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

, aby umieścić je w 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>'); 

kod Praca w http://www.jsfiddle.net/EsJAh/

+0

'alert (lang + ':' + języki [język] .labels.language_names [0]'? –

+0

@james, ładny połów .. brakowało tablicy tam .. naprawione w odpowiedzi –

+0

Świetnie! To jest dokładnie to, co chcę :) dzięki stary :) – AnD

3

Można użyć "za"

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

Używanie 'Array' tutaj jest błędne. Powinieneś użyć '{}' aka 'new Object()', tak też działa z Array, ale to tylko dlatego, że ustawiasz właściwości w Array Object, w rzeczywistości nie ustawiasz niczego w Array :) –

+0

@Ivo - całkowicie się z tobą zgadzam. Wygląda na to, że OP ma już to, czego szuka w obiekcie językowym. Pomyślałem, że dam mu coś jeszcze. – mellowsoon

+0

Ciągle nie rozumiem, dlaczego jest źle za pomocą tablicy? – AnD

2

Czy próbowałeś:

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

Powróci Afrikaans

+0

Myślę, że w tym przykładzie nie ma "af" w pierwszej kolejności. Właśnie tego próbuje dostać. – Keyslinger

0

Jeśli używasz jquery, możesz zrobić t Jego rzeczywiście:

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

:)

Powiązane problemy