美文网首页
golang 结构体struct的json tag标签

golang 结构体struct的json tag标签

作者: 第八共同体 | 来源:发表于2018-01-23 19:13 被阅读0次
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前面有逗号。

相关文章

网友评论

      本文标题:golang 结构体struct的json tag标签

      本文链接:https://www.haomeiwen.com/subject/spheaxtx.html