ホームページ > バックエンド開発 > C++ > JObject 階層から特定の JToken を名前で効率的に取得するにはどうすればよいですか?

JObject 階層から特定の JToken を名前で効率的に取得するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-04 15:30:41
オリジナル
505 人が閲覧しました

How to Efficiently Retrieve Specific JTokens by Name from a JObject Hierarchy?

名前による特定のトークンの JObject 階層のトラバース

問題:

JSON 応答が返されたJToken の複雑な階層では、特定の JToken を取得するにはどうすればよいですか?

Newtonsoft.Json 組み込み関数:

Newtonsoft.Json は、トークンに基づいてトークンへの直接ナビゲーションを可能にする SelectToken() メソッドを提供します。パス。例:

JToken distance = jObject.SelectToken("routes[0].legs[0].distance.text");
ログイン後にコピー

これは、距離テキスト値を表す 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);
            }
        }
    }
}
ログイン後にコピー

使用法:

string json = @"...", 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート