首页 > 解决方案 > C# 有条件地循环遍历 JSON 值

问题描述

我对此并不陌生,如果这是一个重复的问题,我深表歉意。在这一点上,我已经尝试了很多不同的东西,我不确定这样做的正确方法。

我正在尝试编写一个函数来循环 aJSON并在某些条件下获取模型的值(即:qty != null, 和sector = 1, position = 1.

我还需要计算每个独特模型的出现次数。任何帮助将不胜感激。

这是看起来的JSON样子。

    [ { "sector": "1", "position": "1", "qty": "1", "model": "SBNHH-1D65C" },
      { "sector": "2", "position": "1", "qty": "1", "model": "" }, 
      { "sector": "3", "position": "1", "qty": "1", "model": "DC6-48-60-18-8F" }, 
      { "sector": "1", "position": "2", "qty": "1", "model": "SBNHH-1D65C" }, 
      { "sector": "2", "position": "2", "qty": "1", "model": "DC6-48-60-18-8F" } ]



public class AntennaItems
{
        public AntennaItems[] root { get; set; }
        public int sector { get; set; }
        public int position { get; set; }
        public string qty { get; set; }
        public string model { get; set; }
}

string requestBodyString = await new StreamReader(req.Body).ReadToEndAsync();

var newJsonString = @"{root:" + requestBodyString + @"}";

List<string> modelList = new List<string>();

var jsonObj = JsonConvert.DeserializeObject<AntennaItems>(newJsonString);

foreach (var elem in jsonObj.root)
{
    modelList.Add(elem.model);
}

return new OkObjectResult($"modelList = {modelList}");

目前我收到以下回复:

modelList = System.Collections.Generic.List`1[System.String]

标签: c#jsonparsing

解决方案


我认为您不需要 root 属性。我稍微修改了类并从中删除了 root 属性:

        public class AntennaItems
    {
        public int sector { get; set; }
        public int position { get; set; }
        public string qty { get; set; }
        public string model { get; set; }
    }


    public HttpResponse ParseJson()
    {
        string requestBodyString = await new StreamReader(req.Body).ReadToEndAsync();

        var newJsonString = @"{root:" + requestBodyString + @"}";

        List<string> modelList = new List<string>();

        var jsonObj = JsonConvert.DeserializeObject<List<AntennaItems>>(newJsonString);

        foreach (var elem in jsonObj)
        {
            modelList.Add(elem.model);
        }
        return new OkObjectResult($"modelList = {modelList}");
    }

您需要在 List 中对其进行反序列化。让我知道它是否有帮助。


推荐阅读