迭代json值

时间:2015-03-20 09:47:16

标签: javascript jquery 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,pending等字段的值,然后还需要使用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等等)时才有效。我如何阅读这两个字段?

6 个答案:

答案 0 :(得分:2)

使用jQuery each iterate function迭代对象。

  

描述:一个通用的迭代器函数,可用于   无缝迭代对象和数组。数组和数组   具有length属性的对象(例如函数的arguments对象)   由数字索引迭代,从0到length-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>

答案 1 :(得分: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])
    }
}

答案 2 :(得分:0)

您可以使用循环通过对象中的索引项进行迭代,并使用以下语法迭代对象的其他属性:

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

hasOwnProperty检查将过滤掉不直接包含在对象中的任何属性(从基类继承)。

答案 3 :(得分: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)代码替换内部if子句的内容。

答案 4 :(得分:0)

您可以将jquery的每个函数迭代为:

var makelist;

$.each(objData, function(i, data){
     makelist = '<li>'+data.title+'</li>';
     $("#conatiner").append(makelist);
});

答案 5 :(得分:0)

用于(.. in ..),然后你得到所有的键,而不仅仅是数字。要检查值是否为对象,可以使用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);