1 回答
TA贡献1775条经验 获得超8个赞
如果您有一个必须接受不同 JSON 类型的端点/rpc,您需要以某种方式告诉它如何区分它们。一种选择是有类似的东西:
type request struct {
bodyA *requestBodyA
bodyB *requestBodyB
}
然后,将这些字段适当地填充到容器 JSON 对象中。该模块将仅在存在键时json填充,否则将其保留为,依此类推。bodyAbodyAnil
这是一个更完整的例子:
type RequestBodyFoo struct {
Name string
Balance float64
}
type RequestBodyBar struct {
Id int
Ref int
}
type Request struct {
Foo *RequestBodyFoo
Bar *RequestBodyBar
}
func (r *Request) Show() {
if r.Foo != nil {
fmt.Println("Request has Foo:", *r.Foo)
}
if r.Bar != nil {
fmt.Println("Request has Bar:", *r.Bar)
}
}
func main() {
bb := []byte(`
{
"Foo": {"Name": "joe", "balance": 4591.25}
}
`)
var req Request
if err := json.Unmarshal(bb, &req); err != nil {
panic(err)
}
req.Show()
var req2 Request
bb = []byte(`
{
"Bar": {"Id": 128992, "Ref": 801472}
}
`)
if err := json.Unmarshal(bb, &req2); err != nil {
panic(err)
}
req2.Show()
}
另一种选择是使用地图更动态地执行此操作,但上面的方法可能就足够了。
- 1 回答
- 0 关注
- 126 浏览
添加回答
举报