> 백엔드 개발 > Golang > Go에서 구조적으로 유사한 요소를 사용하여 중첩된 JSON을 역마샬링하는 방법은 무엇입니까?

Go에서 구조적으로 유사한 요소를 사용하여 중첩된 JSON을 역마샬링하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-13 06:49:13
원래의
455명이 탐색했습니다.

How to Unmarshal Nested JSON with Structurally Similar Elements in Go?

중첩 및 구조적 유사성을 사용하여 JSON 역마샬링

복잡한 JSON 구조를 다룰 때 구조체의 한 요소가 구조체 자체와 동일한 유형입니다. 이로 인해 언마샬링 프로세스 중에 문제가 발생할 수 있습니다.

이 특정 사례에서는 데이터베이스 구성 배열을 나타내는 JSON 문자열이 제공됩니다. 각 데이터베이스 구성에는 복제본 목록을 포함한 다양한 속성이 포함되어 있습니다. 각 복제본은 데이터베이스 구성과 유사한 속성을 가진 JSON 개체이기도 합니다.

이 JSON 문자열을 역마샬링하려면 중첩 및 구조적 유사성을 수용할 수 있는 데이터 구조가 필요합니다.

동적 유형으로 중첩 구조 모델링

JSON 입력은 DBS 구조체의 일부가 아니기 때문에 다음이 필요합니다. 구조를 캡처하기 위한 보다 유연한 데이터 유형입니다. map[string]인터페이스{}는 동적 값으로 키-값 쌍을 나타낼 수 있기 때문에 탁월한 옵션입니다.

예:

type DBS struct {
    URL      string
    Port     string
    Uname    string
    Pass     string
    Authdb   string
    Replicas []DBS
}

func main() {
    raw, err := ioutil.ReadFile("./config.json")
    if err != nil {
        fmt.Println(err.Error())
        os.Exit(1)
    }

    var config []map[string]interface{}
    json.Unmarshal(raw, &config)

    for _, db := range config {
        d, ok := db["db"]
        if !ok {
            // Handle the case where "db" is missing
        }

        db := d.(map[string]interface{})
        url := db["url"].(string)
        port := db["port"].(string)

        var replicas []DBS
        for _, replica := range db["replicas"] {
            replicas = append(replicas, mapToDBS(replica))
        }

        // ... Other operations
    }
}
로그인 후 복사

동적 유형을 사용하여 JSON

이 예에서 config 변수는 데이터베이스 구성을 키-값 쌍으로 보유할 수 있는 맵의 조각입니다.

각 데이터베이스 구성에 대해 "db" 하위 객체를 선택하고 이를 map[string]인터페이스{}로 캐스팅합니다. 이를 통해 "url""port"와 같은 개별 속성에 액세스할 수 있습니다.

"replicas" 속성도 유사하게 처리됩니다. . 각 복제본은 JSON 개체이므로 mapToDBS() 함수를 사용하여 DBS 구조체로 변환할 수 있습니다.

동적 유형의 유연성을 활용하여 효과적으로 JSON 문자열을 역마샬링하고 중첩된 구조를 구문 분석할 수 있습니다.

위 내용은 Go에서 구조적으로 유사한 요소를 사용하여 중첩된 JSON을 역마샬링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿