2013-11-23 312 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); 

}