중첩된 구조체가 있는 구조체가 제공되고, 목표는 JSON 태그를 동적으로 수정하는 것입니다. JSON 인코딩 전 구조체 내의 특정 필드. 원하는 JSON 출력은 특정 필드 이름을 재정의하는 것입니다.
MarshalJSON에서 익명 구조체 사용
In Go 버전 1.8 이상 , 런타임 시 필드의 JSON 태그를 동적으로 변경하는 기술을 사용할 수 있습니다. 여기에는 원래 구조체의 MarshalJSON 메서드 내에서 원하는 필드 태그를 사용하여 익명 구조체를 생성하는 작업이 포함됩니다.
func (u *User) MarshalJSON() ([]byte, error) { type alias struct { ID int64 `json:"id"` Name string `json:"name"` // The modified JSON tag tag string `json:"-"` Another } var a alias = alias(*u) return json.Marshal(&a) }
여기에서 별칭 구조체에는 User 구조체와 동일한 필드가 있지만 이름 필드에는 원하는 필드가 있습니다. JSON 태그("첫 번째" 대신 "이름"). 별칭 구조체의 JSON 인코딩을 반환하면 JSON 필드 이름을 동적으로 재정의할 수 있습니다.
내장된 구조체를 포함하여 구조체의 모든 필드를 반복하려면 다음과 같이 패키지를 반영합니다.
value := reflect.ValueOf(*u) for i := 0; i < value.NumField(); i++ { tag := value.Type().Field(i).Tag.Get("json") field := value.Field(i) fmt.Println(tag, field) }
이 코드는 내장된 Another 구조체의 필드를 포함하여 모든 필드를 반복하고 JSON을 인쇄합니다. 각 필드의 태그 및 필드 값.
위 내용은 런타임 시 Go 구조체의 JSON 태그를 어떻게 동적으로 변경할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!