开发者

Go json omitempty如何实现可选属性

开发者 https://www.devze.com 2024-09-18 10:30 出处:网络 作者: wecode66
目录Go json omitempty实现可选属性有以下 json 字符串对应 go 的结构体反序列化后,得到的 json 结构是总结Go json omitempty实现可选属性
目录
  • Go json omitempty实现可选属性
    • 有以下 json 字符串
    • 对应 go 的结构体
    • 反序列化后,得到的 json 结构是
  • 总结

    Go json omitempty实现可选属性

    有以下 json 字符串

    {
    	"width":256,
    	"height":256,
    	"size":1024
    	"url":"wecode.fun/bucket/photo/a.jpg",
    	"type":"JPG"
    }

    对应 go 的结构体

    type MediaSummary struct {
    	Width    int      `json:"width"`python
    	Height   int      `json:"height"`
    	Size     int      `json:"size"`
    	URL      string   `json:"pythonurl"`
    	Type     string   `json:"type"`
    	Duration http://www.devze.comfloat32 `json:"duration"` 
    }

    反序列化后,得到的 json 结构是

    {
    	"width":256,
    	"height":256,
    	"size":1024
    	"url":"wecode.fun/bucket/photo/a.jpg",
    	"type":"JPG",
    	"duration":0.0
    }

    这里的 “duration”:0.0 并不是我们需要的。

    要去掉这个,可以借助 omitempty 属性。

    即:

    type MediaSummary struct {
    	Width    int      `json:"width"`
    	Height   int      `json:"height"`
    	Size     int      `json:"size"`
    	URL      string   `json:"url"`
    	Type     string   `json:"type"`
    	Duration *float32 `json:"duration,omitempty"` 
    }

    注意,上述有定义2个改动:

    • 1、duration 添加了 omitempty
    • 2、float32 修改为 指针类型 *float32

    这样做的原因可以参考链接:

    golang 的 “omitempty” 关键字略解

    上述修改后,反序js列化的结果是:

    {
    	"width":256,
    	"height":256,
    	"size":1024
    	"url":"wecode.fun/bucket/phopythonto/a.jpg",
    	"type":"JPG"
    }

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号