2010-04-23 47 views
2

我無法解析我無法控制的JSON。我在這裏做錯了什麼?jquery parse json

data.json

{ 
    "img": "img1.jpg", 
    "img": "img2.jpg", 
    "size": [52, 97] 
} 

{ 

    "img": "img3.jpg", 
    "img": "img4.jpg", 
    "size": [52, 97] 
} 

的jquery

$.getJSON("data.json", 
    function(data){ 
     $.each(data, function(i,item){ 
     alert(item.img[i]); 
     }); 
    }); 
+1

您提供的代碼段無效JSON。 – 2010-04-23 20:58:44

+1

我不能相信源會發出那個假的JSON。我會立即將其報告給相關Web服務的管理員/開發人員。讓他們修復它,以便您(和所有其他用戶)以正確的方式使用它。 – BalusC 2010-04-23 21:07:17

回答

9

被嚴重形成JSON。它應該是這樣的:

{images: [{ 
    "img": "img1.jpg", 
    "img": "img2.jpg", 
    "size": [52, 97] 
}, 
{ 

    "img": "img3.jpg", 
    "img": "img4.jpg", 
    "size": [52, 97] 
}] 
} 

這就是爲什麼你有麻煩解析它。

如果您無法控制它,但您知道它將採用類似的形式,您可以使用jQuery.ajax,然後通過一些字符串操作或其他方式將其轉換爲有效的JSON。可能不理想,但是這是唯一可以做的事情,因爲你無法控制返回的JSON。

另請注意,您有兩個具有相同名稱的密鑰。這是另一個問題。

爲了解決這個問題,你可能要像下面這樣:

{images: [{ 
    "img1": "img1.jpg", 
    "img2": "img2.jpg", 
    "size": [52, 97] 
}, 
{ 

    "img3": "img3.jpg", 
    "img4": "img4.jpg", 
    "size": [52, 97] 
}] 
} 

{images: [{ 
    "img": ["img1.jpg", "img2.jpg"], 
    "size": [52, 97] 
}, 
{ 

    "img": ["img3.jpg", "img4.jpg"], 
    "size": [52, 97] 
}] 
} 

我想一個更好的辦法是這樣的:

{images: [{ 
    img: "img1.jpg", 
    size: [52, 97] 
}, 
{ 
    img: "img2.jpg", 
    size: [52, 97] 
}, 
{ 
    img: "img3.jpg", 
    size: [52, 97] 
}, 
{ 
    img: "img4.jpg", 
    size: [52, 97] 
}] 
} 

就像我之前提到的那樣,由於您無法控制JSON,因此您可以做的事情很少。如果可以,我會建議與該網站的管理員/開發人員交談。他們確實需要被告知他們沒有返回有效的JSON。