如何检查 JSON c# 中的键/节点是否存在?

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

我的 Json 如下所示。我想检查下面的 Json 中是否存在以下键/节点。

第一个节点-> AutomationFramework.Technique.Available

第二个节点->验证.客户

    {
      "$type": "Config",
      "Available": true,
      "Verify": {
        "$type": "UserList`2"
        "Customer":"Peter"
      },
      "Identification": true,
      "Verification": false,
      "AutomationFramework": [
        {
          "$type": "custom",
          "Name": "ATL",
          "Technique": {
            "$type": "Technique",
            "PropertyName": "Name",
            "Available": true
          },
          "SolveTechnique": {
            "$type": "Userdefined",
            "Available": true
          },
          "AITechnique": {
            "$type": "AI",
            "X_Value": 2,
            "Y_Value": 3,
            "Available": true
          },
          "WaitTechnique": {
            "$type": "Recursion",
            "Available": true
          }
        }
      ]
    }

我尝试使用以下代码(

ParseJson
下面是解析我创建的JSON的方法):

JObject obj = JObject.Parse(ParseJson(@"C:\Test\Test.Config"));
IEnumerable<JToken> token = obj.SelectTokens("AutomationFramework.Technique.Available", errorWhenNoMatch: false);

即使节点存在,它也会返回 null。

我想要一个可以处理所有场景的通用方法。任何帮助将不胜感激。

该方法应根据存在性返回

True
/
False

c# json json.net
1个回答
2
投票

您的代码不起作用,因为

AutomationFramework
是一个列表,而不是一个对象。

此外,请务必将结果转换为适当的类型。如果知道token的类型,就可以直接就地施放。如果您在编译时不知道类型,可以存储在

JToken
变量中。

在您的代码中您使用的是

SelectTokens
。但如果您只期望其中一个标记,则应该使用
SelectToken
来代替。

假设所需的节点

Technique
将始终出现在
AutomationFramework
列表的第一项中,您可以这样做:

JObject obj = JObject.Parse(ParseJson(@"C:\Test\Test.Config"));
bool avail = (bool)obj.SelectToken("AutomationFramework[0].Technique.Available", errorWhenNoMatch: false);
string cust = (string)obj.SelectToken("Verify.Customer", errorWhenNoMatch: false);
© www.soinside.com 2019 - 2024. All rights reserved.