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

如何在JSON c#中检查键/节点是否存在?,c#,json,json.net,C#,Json,Json.net,我的Json如下所示。 我想检查下面的Json中是否存在以下键/节点 第一个节点->AutomationFramework.technology.Available 第二个节点->验证.Customer 我尝试了以下代码(ParseJson下面是我创建的解析JSON的方法): JObject obj=JObject.Parse(ParseJson(@“C:\Test\Test.Config”); IEnumerable token=obj.SelectTokens(“AutomationFram

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

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

第二个节点->验证.Customer

我尝试了以下代码(
ParseJson
下面是我创建的解析JSON的方法):

JObject obj=JObject.Parse(ParseJson(@“C:\Test\Test.Config”);
IEnumerable token=obj.SelectTokens(“AutomationFramework.technology.Available”,errorWhenNoMatch:false);
在这里,即使节点存在,它也返回null

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


基于存在性,该方法应返回
True
/
False

您的代码不起作用,因为
AutomationFramework
是一个列表,而不是一个对象

此外,请确保将结果强制转换为适当的类型。如果您知道令牌的类型,则可以直接就地强制转换。如果在编译时不知道类型,可以将其存储在
JToken
变量中

在您的代码中,您正在使用
SelectTokens
。但如果您只需要该令牌中的一个,则应使用
SelectToken

假设所需的节点
技术
将始终出现在
自动框架
列表的第一项中,您可以执行以下操作:

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);

您的代码不起作用,因为
AutomationFramework
是一个列表,而不是一个对象

此外,请确保将结果强制转换为适当的类型。如果您知道令牌的类型,则可以直接就地强制转换。如果在编译时不知道类型,可以将其存储在
JToken
变量中

在您的代码中,您正在使用
SelectTokens
。但如果您只需要该令牌中的一个,则应使用
SelectToken

假设所需的节点
技术
将始终出现在
自动框架
列表的第一项中,您可以执行以下操作:

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);

我投了你一票,但我们也应该注意到关于SelectTokens的文档(注意最后的“s”)似乎是错误的。它声明应该返回找到的元素的枚举,而不是null。顺便说一句,我个人发现当签名返回IEnumerable时返回null是毫无意义的。返回null应该在任何API接口中显式声明。幸好c#8引入了可空引用类型,人们应该采用这种类型。我给你投了赞成票,但我们也应该注意到关于SelectTokens(注意最后的“s”)的文档似乎是错误的。它声明应该返回找到的元素的枚举,而不是null。顺便说一句,我个人发现当签名返回IEnumerable时返回null是毫无意义的。返回null应该在任何API接口中显式声明。幸好c#8引入了可空引用类型,人们应该采用这种类型。
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);