2013-11-23 328 views
2

我如何迭代以下格式的JSON中的images?收集的长度为images可以是任意的。我可以操纵它使其成为一个列表,或者我有什么选择来解析它?如何解析JSON并迭代它?

images: { 
    0: { 
    filename: "image1.jpg" 
    }, 
    1: { 
    filename: "image2.jpg" 
    }, 
    2: { 
    filename: "image3.jpg" 
    }, 
} 
+1

你的json看起来很奇怪。图像不应该是一个数组而不是一个对象? –

+0

是的,返回的数据是非常奇怪的,有时它是作为数组返回的,但有时它不是,我正在处理它的逻辑 – Madhatter5501

回答

1

一个可能的解决办法是创建JSON的dynamic表示:

dynamic jsonData = JsonConvert.DeserializeObject(@"{ 
    images: { 
     0: { 
      filename: ""image1.jpg"" 
     }, 
     1: { 
      filename: ""image2.jpg"" 
     }, 
     2: { 
      filename: ""image3.jpg"" 
     } 
    } 
    }"); 


foreach(var item in jsonData["images"]) 
{ 
    //Do something 
} 
1

如果你有this SO question读,你会发现JSON.NET是推荐图书馆使用情况喜欢这个。

你可以尝试使用DataContractJsonSerializer从JSON输入创建对象,但是当我刚刚尝试时,我无法使它与JSON字符串中的项目集合一起工作。

1

你可以用香草做的JavaScript像这样:

for (objectName in data["images"]) { 
    html += data["images"][objectName]["filename"] + "<br />" 
} 

完整的HTML文件下面的例子

<!DOCTYPE html> 
<html> 
    <head> 
     <title></title> 
    </head> 
<body> 
    <div id="result"></div> 
     <script type="text/javascript"> 
      var data = { 
       "images": { 
        "0": { 
         "filename": "image1.jpg" 
        }, 
        "1": { 
         "filename": "image2.jpg" 
        }, 
        "2": { 
         "filename": "image3.jpg" 
        } 
       }}; 

      var html = ''; 
      for (objectName in data["images"]) { 
       html += data["images"][objectName]["filename"] + "<br />" 
      } 

      document.getElementById("result").innerHTML = html; 

     </script> 
    </body> 
    </html> 
1

我最后想出来的 - 虽然可能不是最好的做法它在这种情况下工作

var imageHoldingList = new List<VehicleImagesModel>(); 
var connectionResponse = JsonConvert.DeserializeObject<dynamic>(results); 
var jImage = connectionResponse["response"]["vehicles"]["images"].Children(); 

foreach (var image in jImage) 
{ 
    var h = new VehicleImagesModel 
    { 
     Filename = image.First.filename.ToString(), 
     Caption = image.First.caption.ToString() 
    }; 
    imageHoldingList.Add(h); 

}