首页 > 后端开发 > Golang > json.Unmarshal 转换为自定义的另一种类型(映射到切片)

json.Unmarshal 转换为自定义的另一种类型(映射到切片)

王林
发布: 2024-02-09 08:45:18
转载
1250 人浏览过

json.Unmarshal 转换为自定义的另一种类型(映射到切片)

php小编苹果在这篇文章中将为大家介绍如何使用json.Unmarshal函数将JSON数据转换为自定义的另一种类型,即映射到切片。在开发过程中,我们经常会遇到需要将JSON数据转换为不同的数据类型的情况,而json.Unmarshal函数可以帮助我们实现这一功能。通过本文的介绍和示例代码,相信读者们能够更好地理解和应用json.Unmarshal函数,提高开发效率和代码质量。

问题内容

给定以下 json 字符串:

{
 "username":"bob",
 "name":"robert",
 "locations": [
   {
    "city": "paris",
    "country": "france"
   },
   {
    "city": "los angeles",
    "country": "us"
   }
 ]
}
登录后复制

我需要一种方法将其解组到像这样的结构中:

type User struct {
 Username string
 Name string
 Cities []string
}
登录后复制

其中 cities 是包含“city”值的切片,“country”被丢弃。

我认为这可以使用自定义 json.unmarshal 函数来完成,但不确定如何做到这一点。json.unmarshal 函数来完成,但不确定如何做到这一点。

解决方法

您可以为 cities解决方法

您可以为

定义新类型并实现自定义 unmarshaler

type User struct {
    Username string   `json:"username"`
    Name     string   `json:"name"`
    Cities   []Cities `json:"locations"`
}

type Cities string

func (c *Cities) UnmarshalJSON(data []byte) error {
    tmp := struct {
        City string `json:"city"`
    }{}
    err := json.Unmarshal(data, &tmp)
    if err != nil {
        return err
    }
    *c = Cities(tmp.City)
    return nil
}
登录后复制
🎜游乐场🎜🎜🎜

以上是json.Unmarshal 转换为自定义的另一种类型(映射到切片)的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:stackoverflow.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板