type Data struct {
A string `json:"a"`
D NestedData `json:"d"`
}
type NestedData struct {
D string `json:"d"`
}
func (n *Data) UnmarshalJSON(data []byte) error {
type Alias Data
aux := &struct {
*Alias
NestedData string `json:"d"`
}{
Alias: (*Alias)(n),
}
err := json.Unmarshal(data, &aux)
if err != nil {
return err
}
n.A = aux.A
return json.Unmarshal([]byte(aux.NestedData), &n.D)
}
func TestNestedJson(t *testing.T) {
input := `{
"a": "c",
"d": "{\"d\":\"o\"}"
}`
var data Data
err := json.Unmarshal([]byte(input), &data)
if err != nil {
fmt.Println("反序列化失败:", err)
return
}
fmt.Println("a:", data.A)
fmt.Println("nested d:", data.D.D)
}
网友评论