1 简介

  • json使用go语言内置的encoding/json 标准库
  • 编码json使用json.Marshal()函数可以对一组数据进行JSON格式的编码

    2 对象 -> json字符串

    1. func Marshal(v interface{}) ([]byte, error)
    ```go package main

import ( “encoding/json” “fmt” )

type Person struct { Name string Hobby string }

func main() { p := Person{“5lmh.com”, “女”} // 编码json b, err := json.Marshal(p) if err != nil { fmt.Println(“json err “, err) } fmt.Println(string(b))

  1. // 格式化输出
  2. b, err = json.MarshalIndent(p, "", " ")
  3. if err != nil {
  4. fmt.Println("json err ", err)
  5. }
  6. fmt.Println(string(b))

}

  1. <a name="DDCbj"></a>
  2. # 3 json字符串 -> 对象
  3. 反序列化, 基于 结构体标签, 基于反射, 效率较低
  4. ```go
  5. func Unmarshal(data []byte, v interface{}) error
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. )
  6. type Person struct {
  7. Age int `json:"age,string"`
  8. Name string `json:"name"`
  9. Marry bool `json:"marry"`
  10. }
  11. func main() {
  12. // 假数据
  13. b := []byte(`{"age":"18","name":"ws","marry":true}`)
  14. var p Person
  15. err := json.Unmarshal(b, &p)
  16. if err != nil {
  17. fmt.Println(err)
  18. }
  19. fmt.Println(p) // {18 ws true}
  20. }