2014-09-24 4 views
2

Я пытаюсь перебрать эту JSON строку (которая находится в отдельном файле JSon называется language.json), но ничего не работаетLooping над JSON файл с JQuery

{ 
    "language": [ 
    { 
     "name": "English Languages", 
     "values": ["English 1", "English 2", "English 3", "English 4"] 
    }, 
    { 
     "name": "French Languages", 
     "values": ["French 1", "French 2", "French 3", "French 4"] 
    }, 
    { 
     "name": "Spanish Languages", 
     "values": ["Spanish 1", "Spanish 2", "Spanish 3", "Spanish 4"] 
    } 
    ]} 

JQuery

$.getJSON("script/countries.json", function (data) { 
    $.each(data.language, function (i, v) { 
    var category = data[i]; 
    console.log(category.name) 
    $.each(category.values, function (i, v){ 
     console.log(category.values[i]) 
    }); 
}); 

Может кто-нибудь мне помочь здесь. Я хочу напечатать имя Lanugage, а затем - список значений.

ВЫВОД:

English Language: 
English1 
English2.. 
French Language 
French1 
French2 

и так далее Спасибо!

+1

ли вызывался ваш Ajax обратного вызова .. и что это значение регистрируется для 'data' –

ответ

1

Предполагая, что ваш callback становится называется и data оказывает желаемое значение.

data[i] возвратит неопределенным, потому что вы перебор data.language так что вам нужно использовать либо var category = data.language[i] или $.each() передаст текущее значение в качестве второго пар на обратный вызов. Таким образом, вы можете

//this will iterate through the data.language list and for each item in the array the callback method will be called. 
//The callback method will receive the index of the current item and the item as its 2 parameters 
$.each(data.language, function (i, category) { 
    //here category is the current item in the data.language array so it has the name and values properties 
    console.log(category.name) 
    //the same logic follows here, we are iterating through the values array and since it is an array of string calues the second param lang will be the language 
    $.each(category.values, function (i, lang) { 
     console.log(lang) 
    }); 
}); 
+0

Не могли бы вы подробно объяснить ваш код. Это работает, но я не могу полностью понять. – CuriousDev

+0

@ user1089173 в вашем коде, который вы использовали 'var category = data [i];', поэтому он превратится в 'var category = data [0];', но если вы посмотрите на свои данные, объект 'data' не будет есть ключ под названием '0'. На самом деле вам понадобилось значение в индексе '0'' data.language', что является причиной отказа вашего кода –

+0

, чтобы полностью понять, что было не так в моем коде. Я хочу, чтобы объяснение вашего кода было строковым. Также, когда json находится в одном файле с вашим кодом, он отлично работает. Я помещаю json в отдельный файл и запускаю его, это дает мне неожиданную ошибку токена. Зачем? – CuriousDev

0

Эта линия:

var category = data[i]; 

должен быть

var category = data.language[i]; 
+1

Пожалуйста, поставить некоторые explantion ответить вам писал, что воля помогите другим быстро получить его. –

0

Рассмотрим этот код:

$.getJSON("script/countries.json", function (data) { 
    $.each(data.language, function (i, v) { 
     var category = v;//updated 
     console.log(category.name) 
     $.each(category.values, function (i, name){ 
      console.log(name);//updated 
     }); 
    }); 
});//missing added 
Смежные вопросы