【问题标题】:Decoding JSON int into string将 JSON int 解码为字符串
【发布时间】:2014-06-29 22:27:01
【问题描述】:

我有一个简单的 JSON 字符串,我希望在执行 json.Unmarshal 时将 user_id 转换为 string

{"user_id": 344, "user_name": "shiki"}

我试过这个:

type User struct {
  Id       string `json:"user_id,int"`
  Username string `json:"user_name"`
}

func main() {
  input := `{"user_id": 344, "user_name": "shiki"}`
  user := User{}
  err := json.Unmarshal([]byte(input), &user)
  if err != nil {
    panic(err)
  }

  fmt.Println(user)
}

但我只是得到这个错误:

panic: json: cannot unmarshal number into Go value of type string

游乐场链接:http://play.golang.org/p/mAhKYiPDt0

【问题讨论】:

    标签: go


    【解决方案1】:

    您可以使用json.Number 类型,它被实现为string

    type User struct {
            Id       json.Number `json:"user_id"`
            Username string      `json:"user_name"`
    }
    

    然后你可以在任何其他代码中简单地convert它:

    stringNumber := string(userInstance.Id)
    

    游乐场:https://play.golang.org/p/2BTtWKkt8ai

    【讨论】:

    • 是的。我目前正在使用该选项(仅使用int)。然而,我问是否有办法在解码过程中自动转换它。会很方便的。
    • 抱歉 - 我还没有编写自己的解码器(对 Go 来说还是新手)。也就是说,应该不会太难。谷歌搜索自定义解组/解码器似乎抛出了一些链接。
    • 天啊。 用头撞墙、桌子、将笔记本电脑扔出窗外我一直在寻找为什么我无法将 json 经度转换为 float64 数小时(数天?),因为源使用空的“”字符串时没有(不良来源)。因此,由我来为它进行特殊的解析。这太疯狂了。 “无法将数字解组为字符串”,“无法将字符串解组为 float64”,“无法将 X 解组为 XX”。有一个“json.Number”?!?!啊。有效! +10000
    • 很高兴我能帮助@eduncan911 :)
    • ,Number注解上有没有文档?
    猜你喜欢
    • 1970-01-01
    • 2020-02-11
    • 2012-07-07
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    相关资源
    最近更新 更多