golang结构体和json之间的转换小结
Contents
[NOTE] Updated January 1, 0001. This article may have outdated content or subject matter.
golang提供了结构体到特定格式json/xml/… 转换的便捷途径
我们通过json包 很方便的就可以进行struct到json转换。
举个栗子:
现在有这么一个结构体:
type JsonFor struct {
Foo string `json:"foo"`
Foo_s string `json:"foo_s"`
Foo_t string `json:"foo_t,omitempty"`
}
结构体字段的字段(field)最后的一串(string 之后的)叫做标记(tag).
双引号中的字符串是转换成json之后的 json字段名(key)
(当然 也可以不加这个tags 那么json之后的会是default key 也就是你的字段名(filed name)
下面说一下 这些tags的用法(optional comma and options):
-
什么东西都不加
:上面说过 不加tag struct 的filed name就是json的default key。 -
"-"
: e.g:json:"-"
这个tag会导致该field 会被当前的package忽略掉。 -
“(string)":e.g.:
json:
json:“foo”这个tag会导致转成json后 key变为**foo ,而不再是Field name(default key)**
-
“(string),omitempty”:在上一个tag上面添加了一条规则->如果当前字段为空值(empty) 那么忽略这个字段
-
“,omitempty”:在第一条规则下添加->如果当前字段为空值(empty) 那么忽略这个字段
-
“,string”:只用于以下类型:string, floating point, integer, boolean 。字段值(value)也会被json编码。(常用于与JS的交互)
由于书上都没有介绍 这边记录下。。。。
实验代码在gist上。。。。
Author scnace
LastMod 0001-01-01