首页 > 后端开发 > C++ > 如何使用 Newtonsoft.Json 在 C# 中的嵌套 JObject 层次结构中按名称有效搜索特定 JToken?

如何使用 Newtonsoft.Json 在 C# 中的嵌套 JObject 层次结构中按名称有效搜索特定 JToken?

Mary-Kate Olsen
发布: 2025-01-01 07:38:11
原创
408 人浏览过

How can I efficiently search for a specific JToken by name within a nested JObject hierarchy in C# using Newtonsoft.Json?

在 JObject 层次结构中按名称搜索特定的 JToken

在 C# 中处理 JSON 数据时,Newtonsoft.Json 库提供了各种与 JObject 和 JToken 交互的方法。如果您需要从 JObject 层次结构中按名称检索特定的 JToken,您可能想知道是否有一个内置函数可以简化此任务。

使用 SelectToken() 进行特定令牌导航

如果您知道要检索的 JToken 的确切路径,则 SelectToken() 方法提供了一种直接导航到它的方法。例如:

JObject jObject = ...;
string distanceText = jObject.SelectToken("routes[0].legs[0].distance.text").ToString();
登录后复制

在此示例中,我们从嵌套在第一条路线第一段内的距离属性检索“文本”JToken。

实现递归搜索对于所有令牌

如果您需要查找具有给定名称的 JToken 的所有出现,无论由于它在 JObject 层次结构中的位置,您将需要实现递归搜索方法。这是一种方法:

public static class JsonExtensions
{
    public static List<JToken> FindTokens(this JToken containerToken, string name)
    {
        List<JToken> matches = new List<JToken>();
        FindTokens(containerToken, name, matches);
        return matches;
    }

    private static void FindTokens(JToken containerToken, string name, List<JToken> matches)
    {
        if (containerToken.Type == JTokenType.Object)
        {
            foreach (JProperty child in containerToken.Children<JProperty>())
            {
                if (child.Name == name)
                {
                    matches.Add(child.Value);
                }
                FindTokens(child.Value, name, matches);
            }
        }
        else if (containerToken.Type == JTokenType.Array)
        {
            foreach (JToken child in containerToken.Children())
            {
                FindTokens(child, name, matches);
            }
        }
    }
}
登录后复制

此方法可以按如下方式使用:

foreach (JToken token in jObject.FindTokens("text"))
{
    Console.WriteLine(token.Path + ": " + token.ToString());
}
登录后复制

结果输出将显示所有名为“text”的 JToken 的路径和值。例如:

routes[0].legs[0].distance.text: 1.7 km
routes[0].legs[0].duration.text: 4 mins
routes[0].legs[1].distance.text: 2.3 km
routes[0].legs[1].duration.text: 5 mins
登录后复制

以上是如何使用 Newtonsoft.Json 在 C# 中的嵌套 JObject 层次结构中按名称有效搜索特定 JToken?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板