首頁 > 後端開發 > C++ > 如何在嵌套 JObject 層次結構中按名稱高效找到特定 JToken?

如何在嵌套 JObject 層次結構中按名稱高效找到特定 JToken?

Mary-Kate Olsen
發布: 2024-12-31 12:16:10
原創
619 人瀏覽過

How to Efficiently Find Specific JTokens by Name within a Nested JObject Hierarchy?

在JObject 層次結構中按名稱搜尋特定JToken

背景:

背景:

處理複雜的JSON 結構時,通常需要根據標記名稱檢索特定值。如果沒有內建方法,這可能很有挑戰性。

內建方法:

不幸的是,NewtonsoftJson 函式庫不提供直接方法來擷取 JToken名稱。

遞歸方法:
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);
            }
        }
    }
}
登入後複製

為了克服此限制,可以實現遞歸方法以在 JObject 層次結構中按名稱搜尋 JToken。這是一個範例:

示範:
string json = @"
{
    ""routes"": [
        {
            ""bounds"": {
                ""northeast"": {
                    ""lat"": 50.4639653,
                    ""lng"": 30.6325177
                },
                ""southwest"": {
                    ""lat"": 50.4599625,
                    ""lng"": 30.6272425
                }
            },
            ""legs"": [
                {
                    ""distance"": {
                        ""text"": ""1.7 km"",
                        ""value"": 1729
                    },
                    ""duration"": {
                        ""text"": ""4 mins"",
                        ""value"": 223
                    }
                },
                {
                    ""distance"": {
                        ""text"": ""2.3 km"",
                        ""value"": 2301
                    },
                    ""duration"": {
                        ""text"": ""5 mins"",
                        ""value"": 305
                    }
                }
            ]
        }
    ]
}";

JObject jo = JObject.Parse(json);

foreach (JToken token in jo.FindTokens("text"))
{
    Console.WriteLine(token.Path + ": " + token.ToString());
}
登入後複製

這是一個示範此擴充方法用法的範例:

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
登入後複製
輸出:

以上是如何在嵌套 JObject 層次結構中按名稱高效找到特定 JToken?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板