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 を取得します。
再帰的検索の実装for All Tokens
指定された JToken の出現をすべて検索する必要がある場合JObject 階層内の場所に関係なく、名前を付けるには、再帰的検索メソッドを実装する必要があります。 1 つのアプローチを次に示します。
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 中国語 Web サイトの他の関連記事を参照してください。