登录
首页 >  Golang >  Go问答

强制将JSON解组为字符串

来源:stackoverflow

时间:2024-02-29 09:18:23 216浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《强制将JSON解组为字符串》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

问题内容

我有以下 go 结构,我想将一些 json 数据解组到其中。除了 values 映射(其类型为 map[string]string)之外,它工作正常。

type data struct {
    id          int               `jons:"id"`
    values      map[string]string `json:"values"`

我的 json 数据(我无法更改其格式)具有以下结构和示例数据:

{
   id: 1,
   values: {
      key1: "a string value",
      key2: 7
   }
}

解组 json 数据失败,因为 go 无法将值 7 解组为字符串。

json: cannot unmarshal number into Go struct field Data.Values of type string

有没有办法将 json 值隐式转换为字符串,而不管感知的类型是什么? 更改 json 数据以将值格式化为字符串,即 key2: "7" 不是一个选项。


正确答案


由于 json 中可以有整数或字符串,所以如果使用接口会更好。

类似这样的事情:

type data struct {
    id          int                       `jons:"id"`
    values      map[string]interface{}    `json:"values"`
}

这应该可以解决问题。

参考示例代码: https://play.golang.org/p/PjxWeLTwsCC

您可以创建自己的字符串类型并为其实现 unmarshaljson 函数。

type MadSrting string

type Data struct {
    Id          int                  `jons:"id"`
    Values      map[string]MadString `json:"values"`
}

func (mad *MadString) UnmarshalJSON(data []byte) error {
    if n := len(data); n > 1 && data[0] == '"' && data[n-1] == '"' {
        return json.Unmarshal(data, (*string)(mad))
    }   
    
    *mad = MadString(data)

    return nil
}

示例:https://play.golang.org/p/PsJRsvQJPMZ

终于介绍完啦!小伙伴们,这篇关于《强制将JSON解组为字符串》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>