【发布时间】:2018-09-05 05:18:41
【问题描述】:
说想检查路径“L1.L2.L3”是否存在于 json 对象中。有一种方法可以逐步检查级别(How to check whether json object has some property),但我希望省去麻烦,而是检查路径。
【问题讨论】:
-
序列化之前还是之后?需要解析json字符串或者序列化对象
说想检查路径“L1.L2.L3”是否存在于 json 对象中。有一种方法可以逐步检查级别(How to check whether json object has some property),但我希望省去麻烦,而是检查路径。
【问题讨论】:
您可以使用 newtonsoft.json 中的 SelectToken 方法(token 为 null,当找不到匹配项时):
string json = @"
{
""car"": {
""type"": {
""sedan"": {
""make"": ""honda"",
""model"": ""civics""
}
},
}
}";
JObject obj = JObject.Parse(json);
JToken token = obj.SelectToken("car.type.sedan.make",errorWhenNoMatch:false);
Console.WriteLine(token.Path + " -> " + token?.ToString());
【讨论】:
我最终使用了这样的扩展方法:
public static bool PathExists(this JObject obj, string path)
{
var tokens = obj.SelectTokens(path);
return tokens.Any();
}
但精神与公认的答案相同。
【讨论】: