Javascript JsON получить имя члена объекта - PullRequest
7 голосов
/ 19 октября 2010

это может быть очень простой вопрос, но кажется, что найти ответ нелегко. У меня есть Json, более или менее похоже на:

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

если вы видите json выше, внутри языковой переменной есть несколько языковых объектов. и каждый языковой объект имеет свое собственное имя в качестве идентификатора ("aa", "ab", "af")

Итак, мой вопрос: как получить эти идентификаторы ("aa", "ab", "af"), если я хочу перечислить все эти языки в html? например. если я хочу создать как поле со списком (<option value="aa">Afar</option><option value="ab">Abkhaz</option><option value="af">Afrikaans</option>)

На самом деле я хочу достичь чего-то вроде этого (в php)

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

Есть ли какое-либо решение, подобное приведенному выше для php-синтаксиса моего json в java-скрипте?

пс. если вам интересно, почему я не использую массив - я просто думаю, что будет легче захватить определенный языковой объект (я просто делаю что-то вроде: languages["af"], чтобы получить язык африкаанс), чем я должен делать: проходить весь объект языка и проверьте один за другим, если идентификатор, что я хочу, а затем вернуть его. - Вы можете дать мне другое предложение, если у вас, ребята, есть идея получше:)

С наилучшими пожеланиями,

и

Ответы [ 5 ]

6 голосов
/ 19 октября 2010

это должно делать то, что вы хотите ..

чтобы увидеть их

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

чтобы положить их в 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>');

Рабочий код на http://www.jsfiddle.net/EsJAh/

3 голосов
/ 19 октября 2010

Вы можете использовать "для"

for (var key in languages)
{
 alert(key);
}
2 голосов
/ 19 октября 2010

Вы пробовали:

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

Это вернет африкаанс

2 голосов
/ 19 октября 2010
var data = new Array();
for(var lang in languages) {
    data[lang] = languages[lang];
}
0 голосов
/ 19 октября 2010

Если вы используете jquery , то вы можете сделать это на самом деле:

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

:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...