JSON数组对象的迭代不起作用

时间:2012-05-09 03:41:54

标签: javascript jquery arrays json

我有一个对象数组应该看起来像这样......

[{"Name":"blah","Description":"blah"},{"Name":"blah2","Description":"blah2"}]

使用Javascript / jQuery,我如何获得键/值对?我尝试了很多不同的方法但无济于事。当我尝试获取长度时,它总是返回字符数并遍历每个字符而不是实际的对象数量?当我运行它时,它会返回每个字符拼出的[object Object],[object Object]的警告....

function DisplayItems(data) {
        $.each(data, function () {
            $.each(this, function (key, value) {
                alert(value);
            });
        });
}

现在我看看这个,是不是我期待的对象数组?我怎样才能真正返回字符串,这样我才能真正看到它里面的内容,也许从那里开始?

**编辑:

这是我获取订单的功能(删除垃圾并向您显示警报)...我调用jQuery.Ajax并将返回的数据传递给displayOrders(data)。订单具有包含Item列表的Items的复合属性。

function displayOrders(data) {
        $('#gdvOrders tbody').empty();
        for (var key in data.d) {
            alert(data.d[key].Items);
}

这是我传递给displayItems的内容,你在alert函数中看到的内容。我在一个表中显示Orders(隐藏包括Items的一些列),并且当他们在orders表中选择一行时,想要在另一个表中显示每个订单的Items。在上面显示的函数中,我可以写...

data.d[key].OrderId

它会正常显示。如何显示每个项目的属性?

jQuery.Ajax函数设置为content-type:'application / json; charset = utf-8',这是我从......获得订单的地方。

[WebMethod]
    public static List<Order> GetOrdersByDept(Department department, Filter filter, DateTime? dateFrom = null, DateTime? dateTo = null)
    {
        return OrderLists.GetOrdersByDepartment((Department)department, (Filter)filter, dateFrom, dateTo);
    }

4 个答案:

答案 0 :(得分:1)

看到这是有效的:

data=[{"Name":"blah","Description":"blah"},{"Name":"blah2","Description":"blah2"}]
data.forEach(function(i,j){

console.log("Name :"+i.Name+" Description :"+i.Description);


})

答案 1 :(得分:0)

使用JavaScript,只需使用for .. in循环

即可
for(var i = 0; i < data.length; i++) {
    var obj = data[i];
    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            alert(key + " = " + obj[key]);
        }
    }
}

小提琴 - http://jsfiddle.net/XWsvz/

答案 2 :(得分:0)

  

现在我看看这个,是不是我期待的对象数组?我怎样才能真正返回字符串,这样我才能真正看到它里面的内容,也许从那里开始?

如果将对象作为字符串返回,则只需提醒它即可。但是,如果您的函数正在传递一个未知对象,您始终可以将其转换回JSON字符串并提醒它,以便您可以可视化结构:

function displayItems(data) {
    alert(JSON.stringify(data));
    ...

}

作为旁注,我将函数中的第一个字母更改为小写字母,以匹配JavaScript中函数的命名约定。

答案 3 :(得分:0)

看起来你很亲密:

function DisplayItems(data) {
    console.log('data is: ', JSON.stringify(data));
    $.each(data, function (key, arrayElement, index) {
        console.log('arrayElement ' + index + ' is: ', JSON.stringify(arrayElement));
        $.each(arrayElement, function (key, value) {
            console.log('key: ' + key + ' val: ' + value);
        });
    });
}

http://jsfiddle.net/ux9D8/

根据您的数据,这给了我以下输出:

data is:  [{"Name":"blah","Description":"blah"},{"Name":"blah2","Description":"blah2"}]
arrayElement undefined is:  {"Name":"blah","Description":"blah"}
key: Name val: blah
key: Description val: blah
arrayElement undefined is:  {"Name":"blah2","Description":"blah2"}
key: Name val: blah2
key: Description val: blah2