【问题标题】:How to parse JSON and iterate over it?如何解析 JSON 并对其进行迭代?
【发布时间】:2013-11-23 22:48:38
【问题描述】:

如何在以下格式的 JSON 中迭代 imagesimages 集合的长度可以是任意的。我可以对其进行操作以使其成为一个列表,或者我必须使用哪些选项来解析它?

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

【问题讨论】:

  • 你的 json 看起来很奇怪。图像不应该是数组而不是对象吗?
  • 是的,返回的数据真的很奇怪,有时它作为一个数组返回,但有时它不是,我正在研究它何时不是的逻辑

标签: c# .net json iteration


【解决方案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
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        我最终弄明白了——尽管在这种情况下它可能不是最佳实践

        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);
        

        }

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-04
          • 2018-01-15
          • 2021-03-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多