簡體   English   中英

解析json數據失敗的邏輯

[英]logic to parse json data failing

我有以下json數據:

[{"id":"1","name":"vm"},{"id":"2","name":"live"}] 

這是我要解析的代碼:

$.getJSON('<%= path to my method%>',function(data) {
    console.log(data);  
    $.each(data, function(i, item) {                      
                   console.log(item[i].id);
           console.log(item[i].name);
    }); //end .each

});//end getJSON.       

以下是控制台中的結果:

LOG: [{"id":"1","name":"vm"},{"id":"2","name":"live"}] 
LOG: undefined 
LOG: undefined 
SCRIPT5007: Unable to get value of the property 'id': object is null or undefined 

我發現這篇文章: 使用$ .each對json數據進行jquery循環

所以我試着改變我的代碼看起來像:

function(data) {
    console.log(data);  
    $.each(data, function(i, item) {
         console.log(data[i].id);
             console.log(data[i].name);
    }); //end .each

和這個:

function(data) {
    console.log(data);  
    $.each(data, function(i, item) {
    console.log(item.id);
    console.log(item.name);
    }); //end .each

但我一直都沒有為ids和名字定義。

你能告訴我哪里出錯嗎? 謝謝。

編輯1

function(data) {
       $.parseJSON(data);
       console.log(data);  
       $.each(data, function(i, item) {
             console.log(item.id);
             console.log(item.name);
        }); //end .each

IIRC

$.each(data,function(i,item) 

應該

$.each(data,function(i)

然后你可以在循環中使用this.id和this.name。 即使你的解決方案證明是有效的,使用我的解決方案仍然會更快,因為使用數據[i]將比使用'this'更慢

當你使用.eachi是索引, item是值。 無需像item[i] ,就像你在for..in

$.each(data, function(i, item) {                      
    console.log(item.id);
    console.log(item.name);
});

嘗試這個:

$.each(data, function() {
    console.log(this.id);
    console.log(this.name);
});

您的JSON是作為字符串而不是JSON對象傳遞的,因此您無法訪問其屬性。

使用$.parseJSON()將JSON字符串轉換為實際對象。

data = $.parseJSON(data);

以上應該可以解決問題。

如果您的JSON源可能不可靠,我建議使用try / catch塊來防止無效的JSON加密您的javascript:

try {
    data = $.parseJSON(data);
} catch(errors) {
    console.log(errors);
}

最后,如果您控制JSON的源代碼,則可以在對application/json的響應中設置標頭,jQuery應該自動將響應轉換為JSON對象。

暫無
暫無

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

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