> 백엔드 개발 > Golang > Go에서 단일 구조체 필드에 여러 JSON 태그를 사용하는 방법은 무엇입니까?

Go에서 단일 구조체 필드에 여러 JSON 태그를 사용하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-17 03:25:25
원래의
418명이 탐색했습니다.

How to Use Multiple JSON Tags for a Single Struct Field in Go?

구조체 필드에 대한 여러 JSON 태그

서버에서 JSON 데이터를 수신하고 이를 구조체로 역마샬링해야 하는 시나리오에서, 서로 다른 JSON 태그를 사용하여 동일한 데이터를 표현하려는 상황이 발생할 수 있습니다.

JSON 태그 사용자 정의

JSON 태그는 JSON 표현에 사용되는 필드 이름을 지정합니다. 기본적으로 필드의 태그는 필드 이름과 동일합니다. 그러나 태그를 사용자 정의하여 구조체를 직렬화하거나 역직렬화할 때 사용되는 이름을 변경할 수 있습니다.

단일 JSON 태그

단일 JSON 태그를 사용하는 것은 간단합니다. 원하는 태그를 문자열 리터럴로 지정하기만 하면 됩니다.

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

다중 JSON 태그

질문에서 언급했듯이 여러 JSON 태그를 직접 첨부할 수는 없습니다. 단일 필드. 그러나 이 제한 사항을 해결할 수 있는 기술이 있습니다.

구조체 캐스팅

주어진 솔루션에서는 동일한 필드 레이아웃을 가진 두 개의 구조체를 사용할 것을 제안합니다. 예:

type Foo struct {
    Name string
    Age  int
}

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

그런 다음 Foo 구조체를 Bar 구조체로 캐스팅하여 JSON 태그를 변경할 수 있습니다. 이 기술은 필드 수가 많을 때 특히 유용합니다.

foo := Foo{Name: "Sam", Age: 20}
bar := (*Bar)(unsafe.Pointer(&foo))
로그인 후 복사

주의

이를 방지하려면 두 번째 구조체를 내보내지 않아야 한다는 점에 유의하는 것이 중요합니다. 현재 패키지 외부에서 액세스되지 않도록 합니다. 이렇게 하면 캐스팅이 의도한 대로만 수행되고 실수로 오용되지 않도록 보장됩니다.

다음 코드는 위에서 언급한 캐스팅 기술을 보여줍니다.

package main

import (
    "encoding/json"
    "fmt"
)

type Foo struct {
    Name string
    Age  int
}

type Bar struct {
    Name string `json:"employee_name"`
    Age  int    `json:"-"`
}

func main() {
    foo := Foo{Name: "Sam", Age: 20}
    bar := (*Bar)(unsafe.Pointer(&foo))

    jsonBytes, err := json.Marshal(bar)
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println(string(jsonBytes))
}
로그인 후 복사

이 코드는 Bar 구조체에 정의된 JSON 태그를 사용하여 Foo 구조체 데이터를 성공적으로 직렬화합니다. 다음 JSON 출력이 생성됩니다.

{"employee_name":"Sam"}
로그인 후 복사

위 내용은 Go에서 단일 구조체 필드에 여러 JSON 태그를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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