猿问

动态命名字段名称

我想创建一个 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 中做到这一点?


慕斯王
浏览 107回答 2
2回答

开心每一天1111

只需将resfrom的数据类型更改Placeholder为map[int]Placeholder。userId := 1res := map[int]Placeholder{    userId: {        id:        1,        title:     "delectus aut autem",        completed: false,    },}fmt.Printf("%v", res)游乐场: https: //play.golang.org/p/rCBl2r7fQTe

浮云间

您可以使用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]Placeholderfunc 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))}
随时随地看视频慕课网APP

相关分类

Go
我要回答