代码之家  ›  专栏  ›  技术社区  ›  CrazyCoder

如何检查c中嵌套的JSON解析对象中是否存在键#

  •  -1
  • CrazyCoder  · 技术社区  · 7 年前

    {
        "id": "S01",
        "submittedBy": "A12345",
        "orderData": {
            "items": [
                {
                    "key": "Item1",
                    "value": "10"
                },
                {
                    "key": "Item2",
                    "value": "20"
                }
            ]
        }
    }
    

    通过某种方式,我把这个JSON字符串 jsonString 应用程序中的变量。

    [DataContract]
    public class Order
    {
        [DataMember(Name = "id")]
            public string Id { get; set; }
    
        [DataMember(Name = "submittedBy")]
            public string SubmittedBy { get; set; }
    
        [DataMember(Name = "orderData")]
            public OrderData OrderData { get; set; }    
    
    }
    
    [DataContract]
    public class OrderData
    {
        [DataMember(Name = "items")]
            public List<Items> Items { get; set; }
    }
    
    [DataContract]
    public class Items 
    {
        [DataMember(Name="key")]
            public string Key { get; set; }
    
        [DataMember(Name="value")]
            public string Value { get; set; }
    }
    

    在得到JSON字符串之后,我就这样做了。

    Order order = new Order();
    order = JObject.Parse(jsonString).ToObject<Order>();
    

    现在在 order

    非常感谢您的帮助。

    2 回复  |  直到 7 年前
        1
  •  1
  •   koryakinp    7 年前

    使用LINQ .Any() :

    order.OrderData.Items.Any(q => q.Key == "item3")
    

    您还可能需要添加一些空引用检查:

    order.OrderData?.Items?.Any(q => q.Key == "item3") ?? false;
    
        2
  •  0
  •   Ondrej Tucny    7 年前

    Any() method 这样地:

    bool exists = order.OrderData != null && 
        order.OrderData.Items != null &&
        order.OrderData.Items.Any(x => x.Key == "Item3")
    

    也可以看到这个 article .

    旁注: new Order()

    Order order = JObject.Parse(jsonString).ToObject<Order>();