很多情况下我们需要判断json里面的一个字段,然后根据这个字段的类型,进行解析下面的字段类型,我们则使用json.RawMessage
package main
import (
"encoding/json"
"fmt"
)
type TestStruct struct {
Type int
Body json.RawMessage
}
type Person struct {
Name string
Age int
}
type Worker struct {
Name string
Job string
}
func main(){
input := `
{
"Type": 1,
"Body":{
"Name":"ff",
"Age" : 19
}
}`
ts := TestStruct{}
if err := json.Unmarshal([]byte(input), &ts); err!= nil {
panic( err)
}
switch ts.Type {
case 1:
var p Person
if err := json.Unmarshal(ts.Body, &p); err != nil {
panic(err)
}
fmt.Println(p)
case 2:
var w Worker
if err := json.Unmarshal(ts.Body, &w); err != nil {
panic(err)
}
fmt.Println(w)
}
}