2012-05-09 150 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); 


})