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 關注
- 164 瀏覽
添加回答
舉報