JObject 계층 구조에서 이름으로 JToken 찾기
복잡한 JSON 응답에서 특정 JToken을 검색해야 하는 필요성에 대한 응답으로 이 문서에서는 토론을 제시합니다. NewtonsoftJson 라이브러리 내에서 사용 가능한 옵션에 대해 설명하고 재귀 형식으로 대체 솔루션을 제공합니다. method.
NewtonsoftJson SelectToken 메서드
NewtonsoftJson 라이브러리는 JToken을 이름으로 검색하는 직접적인 방법을 제공하지 않지만 SelectToken() 메서드는 제공합니다. 이 방법을 사용하면 JObject 계층 구조를 탐색하고 해당 경로에 따라 토큰을 선택할 수 있습니다. 예를 들어, 제공된 JSON 응답에서 "텍스트" JToken을 검색하려면:
JObject jObject = JObject.Parse(json); string distanceText = jObject.SelectToken("routes[0].legs[0].distance.text").ToString();
재귀 토큰 검색 방법
JToken의 모든 항목을 찾아야 하는 경우 위치에 관계없이 특정 이름을 사용하는 경우 재귀적인 방법이 필요합니다. 예는 다음과 같습니다.
public static class JsonExtensions { public static List<JToken> FindTokens(this JToken containerToken, string name) { // Initialize a list to store matching JTokens List<JToken> matches = new List<JToken>(); // Call the recursive helper method FindTokens(containerToken, name, matches); // Return the matches return matches; } private static void FindTokens(JToken containerToken, string name, List<JToken> matches) { // Recursively traverse the JObject and JArray elements switch (containerToken.Type) { case JTokenType.Object: // Check JProperties for the name and recurse on their values foreach (JProperty child in containerToken.Children<JProperty>()) { if (child.Name == name) { matches.Add(child.Value); } FindTokens(child.Value, name, matches); } break; case JTokenType.Array: // Recurse on each element of the array foreach (JToken child in containerToken.Children()) { FindTokens(child, name, matches); } break; } } }
데모 및 출력
샘플 데모는 다음과 같습니다.
// Load the JSON response string json = GetJson(); // Parse the JSON into a JObject JObject jo = JObject.Parse(json); // Find all "text" JTokens using the FindTokens method 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
결론
내장된 SelectToken() 메서드는 JObject의 특정 경로를 탐색하는 편리한 방법을 제공하는 반면 재귀적인 FindTokens 메서드는 다음을 제공합니다. 계층 구조 내의 위치에 관계없이 주어진 이름을 가진 모든 JToken을 찾는 솔루션입니다. 이러한 접근 방식 중 선택은 애플리케이션의 특정 요구 사항에 따라 달라집니다.
위 내용은 중첩된 JObject 계층 내에서 이름으로 JToken을 효율적으로 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!