2013-09-13 2 views
-2

У меня есть следующие JSON строка:Перебора JSON результатов с JQuery

{ 
    "responseHeader":{ 
     "status":0, 
     "QTime":2, 
     "params":{ 
      "facet":"false", 
      "fl":"id,title,friendlyurl,avatar,locpath,objectid,objecttype", 
      "indent":"off", 
      "q":"title_search:*castle*", 
      "wt":"json", 
      "fq":"userid:\"C325D42C-A777-4275-BDD2-D7810A8AB9AB\"", 
      "defType":"lucene" 
     } 
    }, 
    "response":{ 
     "numFound":2, 
     "start":0, 
     "docs":[ 
      { 
       "title":"castle a", 
       "objecttype":1, 
       "friendlyurl":"castle-a", 
       "avatar":"6_887_castle-a.JPG", 
       "objectid":6 
      }, 
      { 
       "title":"castle b", 
       "objecttype":1, 
       "friendlyurl":"castle-b", 
       "avatar":"794_360_13j-castle-by-night.jpg", 
       "objectid":794 
      } 
     ] 
    } 

} 

Есть 2 результатов поиска в здесь: Замок A и Замок B

Я хочу Переберите все результаты и получить значение атрибутов заголовка, objectype и friendlyurl

для целей тестирования я просто присвоенный строку JSON для «данные» переменной затем я попробовал:

for (var i = 0, l = data.items.length; i < l; i++) { 
     console.log(data.items[i].title); 
     console.log(data.items[i].objecttype); 
     console.log(data.items[i].friendlyurl); 
    } 

, но затем я получаю: неперехваченным TypeError: Не удается прочитать свойство 'длина' неопределенной

Если я:

data = $.parseJSON(data); 
    for (var i = 0, l = data.items.length; i < l; i++) { 
     console.log(data.items[i].title); 
     console.log(data.items[i].objecttype); 
     console.log(data.items[i].friendlyurl); 
    } 

я получаю: неперехваченным SyntaxError: Неожиданный маркер C JQuery-1.8.3 .min.js: 2

строка в файле js: e.JSON.parse (t);

Я также попытался:

var data = '{"responseHeader":{"status":0,"QTime":1,"params":{"facet":"false","fl":"id,title,friendlyurl,avatar,locpath,objectid,objecttype","indent":"off","start":"0","q":"title_search:*castle*","wt":"json","fq":"userid:\"C325D42C-A777-4275-BDD2-D7810A8AB9AB\"","rows":"10","defType":"lucene"}},"response":{"numFound":2,"start":0,"docs":[{"title":"castle a","objecttype":1,"friendlyurl":"castle-a","avatar":"6_887_castle-a.JPG","objectid":6},{"title":"castle b","objecttype":1,"friendlyurl":"castle-b","avatar":"794_360_13j-castle-by-night.jpg","objectid":794}]}}' 

    var result, 
      size = data.result.docs.length, 
      index; 
    for (index = 0; index < size; index++) { 
     result = data.result.docs[index]; 
     console.log(result.title); 
    } 

но приводит к ошибке: неперехваченным TypeError: Не удается прочитать свойство «документы» из неопределенными.

+1

http://stackoverflow.com/questions/2342371/jquery-loop-on-json-data-using-each – Saturnix

+1

Обратите внимание, что проблема вообще не связана с JSON **. Речь идет о том, как обрабатывать массивы и объекты в JavaScript. * Как * вы получили данные (например, через JSON), не имеют отношения к проблеме. –

ответ

3

Это довольно простая обработка JSON. Что-то, как это должно дать вам начать:

data = $.parseJSON(json); 
$.each(data.response.docs, function(i, item) { 
    console.log(item.title); 
    console.log(item.objecttype); 
    console.log(item.friendlyurl); 
}); 
+0

Thx. Я попробовал ваше предложение, но получил всевозможные ошибки, которые я добавил к моему вопросу. Надеюсь, ты поможешь мне! :) – Flo

1

Вам не нужно JQuery вы можете использовать ваниль JavaScript, как это (предположим, что это JSON назначается к вар называется JSON)

var result, 
     size = json.result.docs.length, 
     index; 
for(index=0; index<size;index++) { 
    result = json.result.docs[index]; 
    console.log(result.title); 
} 
+0

Спасибо. Я попробовал ваше предложение, но все равно получаю ошибки, я обновил свой вопрос своими результатами. Надеюсь, ты поможешь! :) – Flo

0

You должны пройти через все свойства объекта json и искать нужные вам значения ключей. Основная операция состояла бы в вызове ajax, имеющем в качестве параметра объект, возвращаемый вызовом, а затем для каждого цикла вы можете проверить необходимые свойства объекта.

Это как должно выглядеть основные операции:

$.ajax({ 
    url: 'url_to_json.json',  
    dataType: 'json', // Choosing a JSON datatype 
    success: function(data) // Variable data contains the data we get from JSON 
    {   
     $.each(data, function(filterGroupKey, filterGroupValue){  
       if (filterGroupValue && filterGroupValue.hasOwnProperty('title')){ 
        var filterTagModel = filterGroupValue;     
        filterTagModel.title = filterGroupValue['title']; 
        filterTagModel.objectType = filterGroupValue['objecttype'] ; 
        filterTagModel.friendlyUrl = filterGroupValue['friendlyurl']; 
       } 
      });   
    } 
}); 

Затем вы можете использовать filterTagModel и все его свойства для манипулирования данными, полученными.

Смежные вопросы