搜索 Json 对象数组 - 列表与字典

问题描述 投票:0回答:1

我使用以下代码反序列化了 JsonResponse。

var data = (JObject)JsonConvert.DeserializeObject(jsonResponse);

我得到的响应字符串看起来像这样

{  
   "results":[  
      {  
         "url":"tickets/2063.json",
         "id":20794,
         "subject":"Device not working",
         "created_date": "2018-01-10T13:03:23Z",
         "custom-fields":[  
            {  
               "id":25181002,
               "value":34534
            },
            {  
               "id":2518164,
               "value":252344
            }
         ]
      }
   ]
}

我的目标是读取这个 json 对象数组中的某些字段并插入到数据库中。我需要的字段是 id、subject、created_date、member_id。

会员 ID 是自定义字段的一部分。 member_id 是 id=2518164 的值。我已经使用列表来存储它,你能告诉我列表还是字典更适合这种情况吗?如何实现字典

var data = (JObject)JsonConvert.DeserializeObject(jsonResponse);
    var tickets = data["results"].ToList();
     foreach (var ticketItem in tickets){
        Int64? ticketFormId = ticketItem["id"].Value<Int64>();
        string subject = ticketItem["subject"].Value<string>();
        DateTime createdDate = ticketItem["created_date"].Value<DateTime>();

       //Do you think for the next step a dictionary is better or a List is better, since I want to search for a particular id=2518164
        var fieldsList = ticketItem["fields"].ToList();
        foreach(var fieldItem in fieldList){
            Int64? fieldId = fieldItem["id"].Value<Int64>();
            if(fieldId!=null && fieldId == 2518164){
                memberId = fieldItem["value"].Value<string>();
            }
        }
 }
c# .net json list dictionary
1个回答
1
投票

如果下一步是将它们全部插入数据库,只需将它们存储到列表中即可。字典仅适用于通过键搜索项目。

您还可以使用 Linq 以更简单的方式处理 JSON:

var tickets =   JObject.Parse(jsonResponse)["results"]
    .Select(ticket => new
    {
        Id = (long)ticket["id"],
        Subject = (string)ticket["subject"],
        CreatedDate = (DateTime)ticket["created_date"],
        MemberId = (long)ticket["custom-fields"]
            .FirstOrDefault(cf => (int)cf["id"] == 2518164)
            ?["value"],
    })
    .ToList();
© www.soinside.com 2019 - 2024. All rights reserved.