Go에서 JSON을 인터페이스로 역마샬링
특정 필드에 따라 다양한 데이터 구조를 갖는 JSON 문자열이 있는 시나리오를 생각해 보세요. "cmd" 필드로. 이 JSON을 인터페이스 유형의 필드가 포함된 Go 구조체로 역마샬링하고 이를 "cmd" 값을 기반으로 하는 다양한 데이터 구조에 적용하려고 합니다.
해결책
이를 달성하려면 고정 필드가 있는 기본 구조체와 변형 데이터를 보관할 json.RawMessage 필드를 정의하세요. 그런 다음 각 변형에 대한 특정 구조체 유형을 생성하고 명령을 기반으로 이를 역정렬화합니다.
예:
type Message struct { Cmd string `json:"cmd"` Data json.RawMessage } type CreateMessage struct { Conf map[string]int `json:"conf"` Info map[string]int `json:"info"` } func main() { var m Message if err := json.Unmarshal(data, &m); err != nil { log.Fatal(err) } switch m.Cmd { case "create": var cm CreateMessage if err := json.Unmarshal([]byte(m.Data), &cm); err != nil { log.Fatal(err) } fmt.Println(m.Cmd, cm.Conf, cm.Info) default: log.Fatal("bad command") } }
이 예에서 메시지 구조체는 다음을 포함하는 전체 메시지 구조를 나타냅니다. 변형 데이터를 보관하는 "cmd" 필드와 json.RawMessage 필드. CreateMessage는 "create" 명령 변형을 나타내는 특정 구조체 유형입니다.
이 코드는 초기 JSON 문자열을 메시지 변수로 역마샬링한 다음 "cmd" 필드를 사용하여 역정렬화하고 인쇄할 특정 변형을 결정합니다.
위 내용은 동적 필드 값을 기반으로 JSON을 Go 인터페이스로 역마샬링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!