2015-03-20 6 views
0

Вот это JSON, я говорю о том,Итерация через JSON значения

{ 
    "0": { 
     "entry_id": "4", 
     "category_id": "3", 
     "title": "lorem ipusm" 
    }, 
    "1": { 
     "entry_id": "5", 
     "category_id": "3", 
     "title": "lorem ipusm dolor" 
    }, 

    ...... 
    ...... 

    "total_entry": 270, 
    "pending": 7, 
    "url": "http://domainhere.tld/url" 
} 

мне нужно прочитать значения полей как total_entry, до etc..and затем также необходимо перебрать все объекты с ключами как 0,1 (может продолжаться, только два показаны в этом примере. Это то, что я пытаюсь

var makelist; 
for (var i = 0; i < objData.length; i++) { 
    makelist='<li>'+ objData[i].title + '</li>'; 
} 
$('#conatiner').append(makelist); 

Он работает для получения объектов с ключами, как 0,1, но только тогда, когда не JSON содержат другие поля (total_entry и т. д.). Как читать оба поля?

+1

сделать скрипку для этого? –

+3

Можете ли вы изменить свой формат JSON? Логика для этого была бы намного проще, если бы вы могли хранить объекты '0',' 1' и т. Д. Внутри массива и отдельно от 'total_entry',' pending' и т. Д. –

+0

Знаете ли вы, сколько записей в JSON? Вы все равно можете перебирать через него то же самое, но insetad objData.length вы используете objData.number_of_entries или аналогичный –

ответ

2

Используйте jQuery each iterate function для итерации объекта.

Описание: Общая функция итератора, которая может использоваться для , легко перебирает как объекты, так и массивы. Массивы и объекты массива объекты с свойством length (например, объект аргументов функции) повторяются числовым индексом от 0 до длины-1. Другие объекты: , итерированные по их названным свойствам.

чем для каждого свойства/ключа, который неNot-a-Number добавить новый элемент списка:

var obj = { 
 
    "0": { 
 
     "entry_id": "4", 
 
     "category_id": "3", 
 
     "title": "Title for item 0" 
 
    }, 
 
    "1": { 
 
     "entry_id": "5", 
 
     "category_id": "3", 
 
     "title": "Title for item 1" 
 
    }, 
 
    "total_entry": 270, 
 
    "pending": 7, 
 
    "url": "http://domainhere.tld/url" 
 
}; 
 
var makelist = ''; 
 
$.each(obj, function(i, n) { 
 
    if (!isNaN(parseInt(i))) makelist+='<li>'+ n.title + '</li>'; 
 
}); 
 
$('#container').append(makelist);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<ul id="container"></ul>

0

Вы можете использовать цикл для перебора через индексированные элементы в объекте и итерацию через другие свойства вашего объекта, используя следующий синтаксис:

for (var prop in objData) { 
    if (objData.hasOwnProperty(prop) && isNaN(prop)) { 
    // use objData[prop] 
    } 
} 

Проверка hasOwnProperty будет отфильтровывать любые свойства, непосредственно не содержащиеся в объект (унаследованный от базового класса).

0

Это, как вы получите значение ключей все объекта, которые являются целыми числами:

var obj = { '0': 'Zero', 1: 'One', '2': 'Two', somekey: 'somevalue', someotherkey: 'someothervalue' }, propName, arr = []; 

for(propName in obj) 
{ 
    if(obj.hasOwnProperty(propName)) // Avoids using keys/values from possibly existing prototype chain. 
    { 
     if(!isNaN(parseInt(propName, 10))) // Checks, if key name is a number by trying to parse and validating it. 
     { 
      arr.push(obj[propName]); // Adds key's value to array (as example). 
     } 
    } 
} 

console.log(arr); 

Просто замените объект образца с вашим и заменить содержание внутреннего, если положение с (makelist) кодом.

+0

Работа с объектами с 0,1 и т. Д. Как получить значения для «total_entry» и т. Д.? – redGREENblue

0

Вы можете перебирать Jquery по каждой функции, как:

var makelist; 

$.each(objData, function(i, data){ 
    makelist = '<li>'+data.title+'</li>'; 
    $("#conatiner").append(makelist); 
}); 
1
var myJson = { 
    "0": { 
     "entry_id": "4", 
     "category_id": "3", 
     "title": "lorem ipusm" 
    }, 
    "1": { 
     "entry_id": "5", 
     "category_id": "3", 
     "title": "lorem ipusm dolor" 
    }, 
    "50": { 
     "entry_id": "50", 
     "category_id": "30", 
     "title": "lorem ipusm dolor number 50" 
    }, 
    "total_entry": 270, 
    "pending": 7, 
    "url": "http://domainhere.tld/url" 
} 

//for all the keys in myJson 
for (var k in myJson){ 

    //get 'title' if key is a number more than -1 
    if (k > -1){ 
     console.log(myJson[k].title) 
    } 
    else{ 
     //get value of the key 
     console.log(myJson[k]) 
    } 
} 
+0

Проблема k может быть чем угодно от 0 до 100 +, и я не знаю длины заранее. – redGREENblue

+0

вы можете использовать другой тест вместо k> -1. если k - число больше -1, оно даст вам поле заголовка, else (если его строка) просто даст вам значение. –

+2

или использовать isNaN() в качестве теста –

0

использование для (.. в ..), то вы получите все ключи и не только числовыми. Чтобы проверить, является ли это значение объектом, вы можете использовать typeof.

var makelist = ''; 
for (var i in obj) { 
    if (typeof obj[i] == 'object') 
     makelist='<li>'+ obj[i].title + '</li>'; 
    else 
     makelist += '<li>' + obj[i] + '</li>'; 
} 

$('#conatiner').append(makelist); 
Смежные вопросы