jquery解析json

时间:2010-04-23 20:55:16

标签: jquery json

我无法解析我无法控制的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 个答案:

答案 0 :(得分: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。