2010-10-19 25 views
7

esto podría ser una pregunta muy básica, pero parece que no es fácil encontrar la respuesta. Tengo un JSON, más o menos es como:Javascript JsON obtener el nombre de miembro del objeto

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

si ves JSON anterior, hay varios objetos de lenguaje dentro idiomas variable. y cada objeto de lenguaje tiene su propio nombre como su identificador ("aa", "ab", "af")

entonces, mi pregunta es, cómo obtener esos identificadores ("aa", "ab", " af ") si quiero enumerar todos esos idiomas en html? p.ej. si quiero crear como un cuadro combinado (<option value="aa">Afar</option><option value="ab">Abkhaz</option><option value="af">Afrikaans</option>)

en realidad lo que quiero lograr es algo como esto (en php)

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

¿hay alguna solución similar como la sintaxis php arriba para mi JSON en guión java?

ps. si te estás preguntando por qué no estoy usando una matriz, estoy pensando que será más fácil capturar cierto objeto de lenguaje (simplemente hago algo como: languages["af"] para obtener el idioma afrikaans) en lugar de hacerlo: recorrer todo el idioma Objeto y verificar uno por uno si el id es lo que quiero, y luego devolverlo. - ¿Me puede dar otra sugerencia para esto si ustedes tienen una idea mejor :)

Best Regards,

y LOs

+0

Gran Esta es la respuesta muy rápido jajaja, gracias chicos por ayudarme! * vea a continuación la respuesta :) – AnD

Respuesta

6

esto debería hacer lo que quiera ..

a ellos ver

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

para ponerlos en el 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>'); 

código Trabajar en http://www.jsfiddle.net/EsJAh/

+0

'alert (lang + ':' + languages ​​[lang] .labels.language_names [0]'? –

+0

@james, nice catch ... se olvidó de la matriz ... solucionado en respuesta –

+0

¡Genial! Esto es exactamente lo que quiero :) gracias amigo :) – AnD

3

Puede utilizar el "para"

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

Usar 'Array' aquí es incorrecto. Deberías usar '{}' aka 'new Object()', sí, también funciona con Array, pero eso es solo porque estás configurando propiedades en el Array Object, de hecho no estás configurando nada en el Array :) –

+0

@Ivo - Estoy completamente de acuerdo contigo. Simplemente parece que el OP ya tiene lo que está buscando en el objeto de idiomas. Entonces, pensé que le daría algo más. – mellowsoon

+0

¿Aún no entiendo por qué está mal usar una matriz? – AnD

2

¿Has probado:

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

Se volverá Afrikaans

+0

Creo que en este ejemplo lo que él no tiene la 'af' en primer lugar. Eso es lo que está tratando de conseguir. – Keyslinger

0

Si está usando jquery, entonces puede hacer t su realidad:

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

:)

Cuestiones relacionadas