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"
-
-
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前面有逗号。