2012-05-09 128 views
1

我应该这样看对象的数组的...迭代JSON数组对象不工作

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

使用JavaScript/jQuery的,我怎么能得到的键/值对?我尝试了很多不同的方式,但无济于事。当我尝试获取长度时,它总是返回字符数并迭代每个字符而不是实际的对象数?当我运行它,它返回[对象对象],[目标对象]警报列明每个字符....

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

现在我看这个,是不是对象的数组我期待?我怎么能真正返回字符串,所以我可以真正看到它真正的内容,也许从那里去?

**编辑:

这是我的函数来获取订单(切出的垃圾,并显示您的警报)......我叫jQuery.Ajax和返回的数据传递给displayOrders(数据)。这些订单具有包含项目列表的Items的组合属性。

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

这就是我传递给displayItems,你在alert函数中看到的。我在一个表中显示订单(隐藏包括项目的一些列),并且想要在订单表中选择一行时显示另一个表中每个订单的项目。在上面显示的功能,我可以写...

data.d[key].OrderId 

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

jQuery.Ajax函数设置为content-type:'application/json;字符集= 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); 
    } 

回答

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/

+0

嗨,你的解决方案完全在小提琴而不是当我在我的身边运行它。我完全复制它。 http://jsfiddle.net/XWsvz/具有我收到的数据,并将其放入循环中,而不是显示每个属性值,而只是遍历每个字符,就好像它是纯文本一样,没有其他含义。我一直试图找出这个小时,这是令人沮丧的...大声笑... –

0

现在我看着这个,是不是我期待的对象数组?我怎么能真正返回字符串,所以我可以真正看到它真正的内容,也许从那里去?

如果该对象作为字符串返回,您可以简单地将其警告。然而,如果你的函数被传递一个不明物体,可以随时将其转换回JSON字符串,并提醒它,以便您可以直观的结构:

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

} 

一点题外话,我改变了首字母你的函数是一个小写字母,以匹配JavaScript中函数的命名约定。

+0

感谢您的注意,通常我使用骆驼外壳,但由于某种原因没有在这一个。另外,stringify刚刚显示“[object,Object]”,所以基本上只是围绕它引用一些引号。 –

+0

好的,所谓的JSON从哪里来?服务器?如果是这样,请尝试查看Firebug或Chrome Debugger NET选项卡中的响应,看看您是否真的恢复JSON。此外,请检查您的服务器是否正在使用MIME类型的“application-x/json”或“application/json”返回对象。 – jmort253

+0

更新了问题,提供更多信息供您查看。 –

0

这正常工作对我来说,除了你没有用钥匙fiddle

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

这只是返回与以前相同的东西,除了在它前面有一个0。我原来所做的是用一些返回的JSON对象填充一个表,其中一个属性包含其他对象的数组。该属性的列是返回这个[对象,对象],[对象,对象] ... –

+0

@ user1066133所以'数据'​​不是对象的数组?',你想获取对象的数组? – Musa

+0

我已经用更多的细节更新了这个问题,试图给出一个更清晰的理解。 –

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 
+0

控制台显示 数据为:“[object Object],[object Object],[object Object],[object Object]”,然后写出数组元素undefined为:“[”key:0 val:[依此类推。 –

+1

适用于我的数据,你能检查我的jsfiddle并让我知道你有什么不同吗? –

1

看到这是工作:

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

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


})