我需要为函数提供map[string]interface{}
。后面的JSON就是这个:
{
"update": {
"comment": [
{
"add": {
"body": "this is a body"
}
}
]
}
}
我完全被困住了。我尝试使用嵌套结构,地图和两者的混合体,但我只是看不到这个简单问题的解决方案。
我最后一次尝试是:
// Prepare the data
var data = make(map[string]interface{})
var comments []map[string]map[string]string
var comment = make(map[string]map[string]string)
comment["add"] = map[string]string{
"body": "Test",
}
comments = append(comments, comment)
data["update"]["comment"] = comments
答案 0 :(得分:1)
通常人们为此使用interface{}
和Unmarshal()
!
查看一些示例
希望这会有所帮助! :)
答案 1 :(得分:1)
您可以使用以下格式创建和初始化json对象。
import (
"fmt",
"encoding/json"
)
type Object struct {
Update Update `json:"update"`
}
type Update struct {
Comments []Comment `json:"comments"`
}
type Comment struct {
Add Add `json:"add"`
}
type Add struct {
Body Body `json:"body"`
}
type Body string
func main() {
obj := make(map[string]Object)
obj["buzz"] = Object{
Update: Update{
Comments: []Comment{
Comment{
Add: Add{
Body: "foo",
},
},
},
},
}
fmt.Printf("%+v\n", obj)
obj2B, _ := json.Marshal(obj["buzz"])
fmt.Println(string(obj2B))
}
初始化的对象obj将是
map[buzz:{Update:{Comments:[{Add:{Body:foo}}]}}]
答案 2 :(得分:0)
我成功了,觉得很丑。
// Prepare the data
var data = make(map[string]interface{})
var comments []map[string]map[string]string
var comment = make(map[string]map[string]string)
comment["add"] = map[string]string{
"body": "Test",
}
comments = append(comments, comment)
var update = make(map[string]interface{})
update["comment"] = comments
data["update"] = update