package main
import (
"fmt"
"encoding/json"
)
type UserInfo struct {
UsrId int64 `json:"user_id,omitempty"`
NickName string `json:"nickname"`
Address string `json:"-" `
}
func main () {
var u UserInfo = UserInfo{
NickName: "zhanglinpeng",
Address: "",
}
rl, err:= json.Marshal(u)
if err != nil {
fmt.Println("json marshal error: ", err)
}
// os.Stdout.Write(rl)
fmt.Println(string(rl))
var vlr UserInfo
err1 := json.Unmarshal(rl, &vlr)
if err != nil {
fmt.Println("json unmarshal error: ", err1)
}
fmt.Printf("%v\n", vlr)
}
Output:
{"nickname":"zhanglinpeng"}
{0 zhanglinpeng }
注意事项,在标签中json:"nickname"
外层符号为键盘Tab健上方的键。json冒号和后面的字符串之间不能有空格, omitempty和逗号之间也不能有空格,总之在标签中能不用空格就不用空格。
- UsrId字段没有显示的原因是,我们在实例化结构体的时候未实例化UsrId字段,那么json结果输出中就没有这个字段,但是实际上,他的默认值是0,是存在的,这也是为什么在最后的转化回去的输出结果中该字段的值为0.
- Address字段无论设置与否,结构都不会显示,因为标签设置为了
-
。
我们在-
字符的后面加了一个逗号。结果就会输出Address字段,字段名为"-"
package main
import (
"fmt"
"encoding/json"
)
type UserInfo struct {
UsrId int64 `json:",omitempty"`
NickName string `json:"nickname"`
Address string `json:"-," `
}
func main () {
var u UserInfo = UserInfo{
NickName: "zhanglinpeng",
Address: "",
}
rl, err:= json.Marshal(u)
if err != nil {
fmt.Println("json marshal error: ", err)
}
// os.Stdout.Write(rl)
fmt.Println(string(rl))
var vlr UserInfo
err1 := json.Unmarshal(rl, &vlr)
if err != nil {
fmt.Println("json unmarshal error: ", err1)
}
fmt.Printf("%v\n", vlr)
}
Output:
{"nickname":"zhanglinpeng","-":"shanghai"}
{0 zhanglinpeng shanghai}
如果在结构体实例化中没有实例化字段就会跳过,注意omitempty前面有逗号。