我想创建一个JSON响应,其中父对象的字段名称具有动态名称。
最好用一个例子来解释。
现在,我的回答如下:
{
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
}
为此,我创建了一个结构->填充它->返回它。
我的结构如下:
type Placeholder struct {
userId int `json:"userId"`
id int `json:"id"`
title string `json:"title"`
completed bool `json:"completed"`
}
//...
res := Placeholder{
userId: 1,
id: 1,
title: "delectus aut autem",
completed: false,
}
现在,我想使用userId作为字段名称。所以我想得到这个结果:
{
"1": {
"id": 1,
"title": "delectus aut autem",
"completed": false
}
}
在Go中有可能这样做吗?
答案 0 :(得分:1)
只需将res
的数据类型从Placeholder
更改为map[int]Placeholder
。
userId := 1
res := map[int]Placeholder{
userId: {
id: 1,
title: "delectus aut autem",
completed: false,
},
}
fmt.Printf("%v", res)
答案 1 :(得分:0)
您可以使用json:",inline"
嵌入结构。
注意::不要忽略真实代码中的错误!
type Placeholder struct {
ID int `json:"id"`
Title string `json:"title"`
Completed bool `json:"completed"`
}
type PlaceholderWithUserID struct {
UserID int `json:"userId"`
Placeholder `json:",inline"`
}
type PlaceholderMap map[int]Placeholder
func main() {
var res PlaceholderWithUserID
_ = json.Unmarshal([]byte(`{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}`), &res)
mapping := PlaceholderMap{
res.UserID: res.Placeholder,
}
out, _ := json.Marshal(mapping)
fmt.Println(string(out))
}