>백엔드 개발 >C++ >JObject 계층 구조에서 이름으로 특정 JToken을 효율적으로 검색하는 방법은 무엇입니까?

JObject 계층 구조에서 이름으로 특정 JToken을 효율적으로 검색하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-04 15:30:41509검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.