2010-10-19 10 views
7

questa potrebbe essere una domanda molto semplice, ma sembra che non sia facile trovare la risposta. Ho un JSON, più o meno è come:Javascript JsON get nome membro dell'oggetto

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

se si vede JSON sopra, ci sono diversi oggetti linguaggio all'interno variabile lingue. e ogni oggetto linguaggio ha il proprio nome come identificativo ("aa", "ab", "af")

quindi la mia domanda è, come ottenere quell'identificatore ("aa", "ab", " af ") se voglio elencare tutte quelle lingue in html? per esempio. se voglio creare come una casella combinata (<option value="aa">Afar</option><option value="ab">Abkhaz</option><option value="af">Afrikaans</option>)

in realtà quello che voglio ottenere è qualcosa di simile (in php)

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

c'è qualche soluzione simile, come la sintassi php sopra per il mio JSON in script java?

ps. se ti stai chiedendo perché non sto usando l'array - sto solo pensando che sarà più facile afferrare un determinato oggetto di linguaggio (im semplicemente fare qualcosa come: languages["af"] per ottenere la lingua afrikaans) piuttosto che dovrei fare: scorrere l'intera lingua oggetto e controllare uno alla volta se l'id è quello che voglio, e quindi restituirlo. - che mi può dare un altro suggerimento per questo se voi ragazzi avete una migliore idea :)

migliori saluti,

AnD

+0

Grande Questa è la risposta molto veloce hahaha, grazie ragazzi per avermi aiutato! * vedi sotto per la risposta :) – AnD

risposta

6

questo dovrebbe fare quello che vuoi ..

per vederli

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

di metterli nel 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>'); 

codice Lavorare in http://www.jsfiddle.net/EsJAh/

+0

'allarme (lang + ':' + lingue [lang] .labels.language_names [0]' –

+0

@james, bella cattura .. perso la matrice lì .. fissato in risposta –

+0

Grande questo è esattamente quello che voglio.! :) grazie amico :) – AnD

3

È possibile utilizzare il "per"

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

L'uso di 'Array' qui è sbagliato. Dovresti usare '{}' aka 'new Object()', sì funziona anche con Array, ma è solo perché stai impostando le proprietà sull'oggetto Array, di fatto non stai impostando nulla nell'array :) –

+0

@Ivo - Sono completamente d'accordo con te. Sembra proprio che l'OP abbia già ciò che sta cercando nell'oggetto languages. Quindi, ho pensato di dargli qualcos'altro. – mellowsoon

+0

Non riesco ancora a capire perché è sbagliato usare l'array? – AnD

2

Hai provato:

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

Si tornerà Afrikaans

+0

Penso che in questo esempio ciò che egli non ha la 'AF', in primo luogo. Questo è quello che sta cercando di ottenere. – Keyslinger

0

Se si utilizza jquery, quindi è possibile fare t la sua realtà:

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

:)