我的 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
。
您的代码不起作用,因为
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);