如何解析JSON并迭代它?

时间:2013-11-23 22:48:39

标签: c# .net json iteration

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

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

4 个答案:

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

如果您阅读this SO question,则会注意到JSON.NET是推荐用于此类情况的库。

您可以尝试使用DataContractJsonSerializer从JSON输入创建对象,但是当我刚才尝试时,我无法使用JSON字符串中的一组项目。

答案 2 :(得分:1)

您可以使用这样的vanilla 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>

答案 3 :(得分: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);

}