从JSON获取深层嵌套对象

时间:2017-12-08 15:06:55

标签: c# json.net

基本上我正在使用HTMLAgilityPack做一些webscraping,并且我将一个巨大的json作为一个字符串,然后我使用json.net包将其转换为JObject

现在在JObject内的某个地方,有一些我想要的东西。但由于它是非常深层嵌套的,我想知道是否确实有一种方法来获取这些对象,而不知道它们在JObject内究竟在哪里。我所知道的只是他们的名字。有没有办法让我在整个JObject内进行某种搜索,只知道我正在寻找的对象/属性名称?

可悲的是,我无法找到任何可以使用的相关问题/记录方法。

1 个答案:

答案 0 :(得分:1)

这可能对您有用:

private JToken GetValueByKey(JObject jObject, string key)
{
    foreach (KeyValuePair<string, JToken> jProperty in jObject)
    {
        if (jProperty.Key.Equals(key))
        {
            return jProperty.Value;
        }
        else if (jProperty.Value is JObject)
        {
            return GetValueByKey((JObject)jProperty.Value, key);
        }
    }
    return null;
}

它需要您想要在其中搜索键的JObject以及您要搜索的键。 它映射JObject中的所有属性以查看或匹配键,如果不匹配,它将检查或当前属性可以强制转换为JObject。如果它可以转换为JObject,它将检查所有JObjects值或你的密钥匹配。

如果找到匹配项,则会返回与您的密钥匹配的值。

如果在循环访问JObject中的所有属性后找不到匹配项,则它将返回null。