为了账号安全,请及时绑定邮箱和手机立即绑定

动态命名字段名称

动态命名字段名称

Go
慕斯王 2022-05-18 14:11:27
我想创建一个 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 中做到这一点?
查看完整描述

2 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

只需将resfrom的数据类型更改Placeholder为map[int]Placeholder。


userId := 1

res := map[int]Placeholder{

    userId: {

        id:        1,

        title:     "delectus aut autem",

        completed: false,

    },

}

fmt.Printf("%v", res)

游乐场: https: //play.golang.org/p/rCBl2r7fQTe


查看完整回答
反对 回复 2022-05-18
?
浮云间

TA贡献1829条经验 获得超4个赞

您可以使用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))

}


查看完整回答
反对 回复 2022-05-18
  • 2 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号