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