簡體   English   中英

我如何迭代此json?

[英]How can I iterate this json?

我從服務器檢索到的是“ This”:

在此處輸入圖片說明

在jQuery中進行ajax調用后:

$.ajax({
    type: "POST",
    url: URL + "/webservices/WS.asmx/MyFunction",
    data: JSON.stringify({ "ID": ID }),
    contentType: 'application/json; charset=utf-8',
    success: function (json) {

    },
    error: function (jqxhr, text, error) {

    }
});

我想迭代data (數組)中的項。 嘗試過:

for (i in json.data) {
    var feed = json.data[i];
    console.log(feed.message);
}

但它什么也不打印。 我哪里錯了?

如果顯示的內容確實是您在success方法中所得到的,則您有一個帶有屬性d的對象,該對象包含一個JSON字符串。 您可以這樣解析:

success: function(response) {
    var data = $.parseJSON(response.d).data;
    // use the data, which is an array
}

從下面的評論中:

但是為什么我需要使用$ .parseJSON? 不能僅通過請求來管理它? 以dataType為例,但仍然無法使用。

您不需要dataType ,它似乎服務器正在返回正確的MIME類型,因此jQuery已經正確處理了第一級解析(反序列化)。

無論向您發送什么數據,數據似乎都將其發送為雙重編碼:首先,它對數組進行編碼,然后創建一個對象,並將該數組分配為data屬性,將該對象序列化為JSON,然后將該字符串放在d屬性上另一個對象,並對其進行序列化。 因此,盡管jQuery會自動為您處理第一步解析(反序列化)步驟,但它並不知道第二步的必要性。 我懷疑您可以在服務器級別解決此問題; 您可能想發布一個單獨的問題,詢問如何執行此操作。


根據您的進一步評論:

它從.NET Web服務方法調優。 通話后,我從Facebook下載了JSON。 然后將其存儲在json變量中。 然后我將其作為字符串返回。 我認為網絡服務序列化了已經序列化的json,對嗎?

嗯,這就是問題所在。 您有三種選擇:

  1. 繼續做您正在做的事情,並執行上面的顯式$.parseJSON調用。

  2. 在Web方法中做任何您需要做的事情,告訴它您將發送回原始JSON,並且不應對其進行編碼; 在這種情況下,jQuery將在您success接收它之前為您解析它,您可以刪除parseJSON調用。

  3. 解析從Facebook獲得的字符串,然后將結果數組放入Web方法返回的結構中。 然后,(再次)jQuery將為您解析它,您可以直接使用response.d.data而無需進一步解析。

正如@TJCrowder指出的那樣,您的問題與在后端上序列化數據的方式有關,這不是在真實的json對象中以字符串形式發送json的好習慣。

您應該這樣做:

success: function (json) {
    var jsonObject = JSON.parse(json.d);
    //then iterate through it
    for(var i=0;i<jsonObject.data.length;i++){
        var feed = jsonObject.data[i];
        console.log(feed);
    }
},

關鍵是使用for(var key in jsonObject.data) ,在JavaScript中並不安全,因為其他原型屬性會顯示在您的鍵中。

我假設json是不是字符串的對象,並且已經轉換為json對象。 也使用json.d.data而不是json.data

在var循環中使用var,而不是feed來打印feed。

for (var i in json.d.data) {
    var feed = json.d.data[i];
    console.log(feed);
}

因為我在那里看不到{feed:{message:''}}}

嘗試使用

for (var i in json.d.data) {
    var feed = json.d.data[i];
    console.log(i+" "+feed);
}

其中i = Key & feed = value

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM