1 回答
TA贡献1828条经验 获得超3个赞
如果在编译时没有指定它,您仍然需要在某处指定它。
如果在检索 Json 数据之前指定,您可以简单地做一个 switch case,将它解组到您想要的对象。
如果在Json 数据中指定,则可以json.RawMessage在确定适合哪种类型的结构后将“灵活”部分编组到 a 中以进行处理:
package main
import (
"encoding/json"
"fmt"
)
var s = `{"type":"structx", "data":{"x":9,"xstring":"This is structX"}}`
type JsonStruct struct {
Type string
Data json.RawMessage
}
type StructX struct {
X float64
Xstring string
}
type StructY struct {
Y bool
}
func main() {
var a *JsonStruct
err := json.Unmarshal([]byte(s), &a)
if err != nil {
panic(err)
}
switch a.Type {
case "structx":
// We Unmashal the RawMessage part into a StructX
var s *StructX
json.Unmarshal([]byte(a.Data), &s)
if err != nil {
panic(err)
}
fmt.Println(s)
case "structy":
// Do the same but for structY
}
}
- 1 回答
- 0 关注
- 151 浏览
添加回答
举报