struct转json字符串

json.Marshal
  package main

  import (
      "encoding/json"
      "fmt"
  )

  type Person struct {
      Name string
      Age  int
      From string
  }

  func main() {
      p := Person{}
      p.Name = "xiaoming"
      p.Age = 18
      p.From = "china"
      v, err := json.Marshal(p)
      if err != nil {
          fmt.Println("marshal failed!", err)
          return
      }
      fmt.Println("marsha result: ", string(v))
      return
  }

执行后输出:

marsha result: {“Name”:“xiaoming”,“Age”:18,“From”:“china”}

不能转换结构体中未导出变量

  package main

  import (
      "encoding/json"
      "fmt"
  )

  type Person struct {
      Name string
      age  int
      From string
  }

  func main() {
      p := Person{}
      p.Name = "xiaoming"
      p.age = 18
      p.From = "china"
      v, err := json.Marshal(p)
      if err != nil {
          fmt.Println("marshal failed!", err)
          return
      }
      fmt.Println("marsha result: ", string(v))
      return
  }

执行后输出:

marsha result: {“Name”:“xiaoming”,“From”:“china”}

导出json字符串中key名字与结构体变量命名一致,我们可以通过结构体定义时指定导出后key值;并且支持如果结构体中变量为空时不导出。

  package main

  import (
      "encoding/json"
      "fmt"
  )

  type Person struct {
      Name string `json:"person_name"`
      Age  int `json:"person_age"`
      From string `json:"person_from,omitempty"`
  }

  func main() {
      p := Person{}
      p.Name = "xiaoming"
      p.Age = 18
      v, err := json.Marshal(p)
      if err != nil {
          fmt.Println("marshal failed!", err)
          return
      }
      fmt.Println("marsha result: ", string(v))
      p.From = "china"
      v, err = json.Marshal(p)
      if err != nil {
          fmt.Println("marshal failed!", err)
          return
      }
      fmt.Println("marsha result: ", string(v))
      return
  }

执行后输出:

marsha result: {“person_name”:“xiaoming”,“person_age”:18}
marsha result: {“person_name”:“xiaoming”,“person_age”:18,“person_from”:“china”}