【问题标题】:JSON string array without Keys into a GoLang struct没有键的 JSON 字符串数组到 GoLang 结构中
【发布时间】:2017-04-30 21:05:18
【问题描述】:

我正在尝试将从 POST 请求提交的 JSON 解析为 Web 服务中的结构以发送电子邮件。以下 JSON 在请求正文中提交。

{
  "body": {
    "template": "abctemplate.html",
    "params": {
      "name": "Chase",
      "email": "1234@gmail.com"
    }
  },
  "to": [
    "abc@gmail.com",
    "xyz@gmail.com"
  ],
  "cc": [
    "xxx@example.com",
    "yyy@example.com"
  ],
  "replyTo": {
    "email": "aaa@gmail.com",
    "name": "Jack"
  },
  "bcc": "ccc@gmail.com",
  "subject": "Hello, world!"
}

这被映射并读入以下结构

type emailData struct {
    Body struct {
        Template string            `json:"template"`
        Params   map[string]string `json:"params"`
    } `json:"body"`
    To      map[string]string `json:"To"` // TODO This is wrong
    CC      string            `json:"cc"` // TODO this is wrong
    ReplyTo struct {
        Email string `json:"email"`
        Name  string `json:"name"`
    }
    BCC     string `json:"bcc"`
    Subject string `json:"subject"`
}

'to' 和 'cc' JSON 字段都是长度未知的字符串数组,并且没有键。有没有办法将字符串数组映射到结构字段?我已经尝试了两种不同的方式,其中有 // TODO 标签但没有运气。谢谢!

【问题讨论】:

    标签: json go


    【解决方案1】:

    ccto 都是 json 数组,您可以将它们解组为 Go 切片,而无需担心长度。

    type emailData struct {
        Body struct {
            Template string            `json:"template"`
            Params   map[string]string `json:"params"`
        } `json:"body"`
        To      []string `json:"to"`
        CC      []string `json:"cc"`
        ReplyTo struct {
            Email string `json:"email"`
            Name  string `json:"name"`
        }
        BCC     string `json:"bcc"`
        Subject string `json:"subject"`
    }
    

    https://play.golang.org/p/Pi_5aSs922

    【讨论】:

      【解决方案2】:

      使用下面的方法将 json 转换为 golang 中的结构:

      Json-goStruct

      注意地图,可能是 go struct,反之亦然。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-14
        • 2021-08-29
        • 1970-01-01
        • 2022-12-19
        • 2016-01-05
        • 2011-08-04
        • 2012-01-22
        相关资源
        最近更新 更多