如何检查 JSON 中是否存在嵌套的键?

4

我有以下的if语句,它的工作很正常:

if (json1.ContainsKey("key2"))
{
    // do something here.
}

json1 包含以下内容:

{
  "key1": {
    "key1_1": "value1_1",
    "key1_2": "value1_2",
    "key1_3": [
      "value1_3_2",
      "value1_3_2"
    ],
    "key1_1": "value1_1"
  },
  "key2": "value2_1",
  "key3": "value3_1"
}

我可以像这样从键中获取特定的值:

  1. console.writeline(json1["key2"]);

  2. console.writeline(json1["key1"]["key1_3"][0]);

我现在正在尝试检查 key1_3 是否存在,但不知道如何操作。

我尝试了以下代码示例,但它们都不能正常工作:

if (json1.ContainsKey("key1_3"))
{
    // do something here.
}

if (json1["key1"].ContainsKey("key1_3"))
{
    // do something here.
}

如何检查嵌套键是否存在,例如key1_3

2个回答

10

ContainsKey是定义在JObject上的方法,而索引器返回JToken。您可以使用json pathSelectToken并检查其是否为null

var token = json1.SelectToken("$.key1.key1_3");
if(token != null)  
{
    ....
}

或者像这样:

if(json1["key1"]?["key1_3"] != null)
{
    ...
}

6

如果你想检查密钥,可以使用以下方法:

if(json1["key1"].Type == JTokenType.Object)
{
    if(json1["key1"].Value<JObject>().ContainsKey("key1_3"))
    {
        /// TODO
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接