我有一个RESTful服务,返回类似于以下显示的响应:
"Basket" : {
"Count": 1,
"Fruits": {[
{
"Name":"Mango",
"Season":"Summer"
},
{
"Name":"Fig",
"Season":"Winter"}
]}
}
我正在尝试创建Go lang模型来解组内容。以下是我尝试的代码:
type Response struct {
Count int
Fruits []Fruit
}
type Fruit struct {
Name string
Season string
}
但是当我在测试代码中编组Response对象时,我没有看到类似的json。 (https://play.golang.org/p/EGKqfbwFvW) Marshalled数据始终显示为:
{
"Count":100,
"Fruits":[
{"Name":"Mango","Season":"Summer"},
{"Name":"Fig","Season":"Winter"}
]
}
请注意,水果在原始json中显示为数组 [] 而非 {[]} 。如何在golang中为这个响应建模结构?
答案 0 :(得分:1)
我会制作' Baskets' '响应'中的结构,创建' BasketsData'结构,并给它一些标签。
type Fruit struct {
Name string `json:"Name"`
Season string `json:"Season"`
}
type BasketData struct {
Count int `json:"Count"`
Fruits []Fruit `json:"Fruits"`
}
type Response struct {
Basket BasketData `json:"Basket"`
}
通过这种方式,您可以在编辑时获得顶级JSON响应。
fruitmania := []Fruit{{Name: "Mango", Season: "Summer"},
{Name: "Fig", Season: "Winter"}}
basket := Response{BasketData{Count: 100, Fruits: fruitmania}}
b, _ := json.Marshal(basket)
fmt.Println(string(b))
checkit-checkit out: https://play.golang.org/p/TuUwBLs_Ql
答案 1 :(得分:1)
您的模型完全正确且有效,但JSON对象不是。 "Fruits"
如果它应该是键值对,则它没有名称,或者它应该包含在[]
而不是{}
中。
JSON obj应格式如下:
{
"Basket" : {
"Count": 1,
"Fruits": [
{
"Name":"Mango",
"Season":"Summer"
},
{
"Name":"Fig",
"Season":"Winter"
}
]
}
}
实际上无效的json不应该工作https://play.golang.org/p/yoW7t4NfI7