> 백엔드 개발 > Golang > 단일 Go 구조체 필드에 대해 여러 JSON 태그를 정의할 수 있습니까?

단일 Go 구조체 필드에 대해 여러 JSON 태그를 정의할 수 있습니까?

Susan Sarandon
풀어 주다: 2024-12-24 14:27:18
원래의
726명이 탐색했습니다.

Can Multiple JSON Tags Be Defined for a Single Go Struct Field?

여러 JSON 태그가 있는 구조체

JSON 응답이 서버에서 수신되어 구조체로 역마샬링되어야 하는 시나리오에서, JSON 태그를 다른 서버로 보내기 전에 수정해야 할 수도 있습니다. 일반적으로 여기에는 새 구조체를 생성하고 데이터를 수동으로 복사하는 작업이 포함됩니다.

그러나 단일 구조체에 대해 여러 JSON 태그를 정의할 수 있는지 고려해 볼 가치가 있습니다. 아래 예와 같이 구조체 정의에서 동일한 필드에 여러 태그를 직접 연결하려는 시도는 지원되지 않습니다.

type Foo struct {
    Name string `json:"name" json:"employee_name"`
    Age  int    `json:"age" json:"-"`
}
로그인 후 복사

대신, 가능한 해결책은 동일하게 배치된 두 구조체 사이를 캐스팅하는 것입니다(일치하는 이름, 유형 및 필드 순서). 이 접근 방식은 일반적으로 권장되지 않지만 원하는 결과를 얻으려면 신중하게 사용할 수 있습니다.

type Foo struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

type Bar struct {
    Name string `json:"employee_name"`
    // Age is not exported
    age int `json:"-"`
}

func main() {
    foo := Foo{}
    // Unmarshal JSON
    err := json.Unmarshal([]byte("{\"name\":\"Sam\",\"age\":20}"), &foo)
    if err != nil {
        log.Fatal(err)
    }

    // Cast between types, overwriting internal representation
    bar := (*Bar)(unsafe.Pointer(&foo))

    // Marshal modified JSON
    data, err := json.Marshal(bar)
    if err != nil {
        log.Fatal(err)
    }

    // Example JSON: {"employee_name":"Sam"}
    fmt.Println(string(data))
}
로그인 후 복사

이 캐스팅 접근 방식은 신중하게 사용해야 한다는 점에 유의하는 것이 중요합니다. 특정 컨텍스트 외부에서 의도하지 않은 사용을 방지하려면 두 번째 구조체를 내보내지 않아야 합니다.

위 내용은 단일 Go 구조체 필드에 대해 여러 JSON 태그를 정의할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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