映射关系

Go 类型和 json 对象的映射关系
golang json
Bool ====> booleans
Float64 ====> numbers
String ====> strings
[]interface{} ====> arrays
map[string]interface{} ====> objects
nil ====> null

转化规则

struct ==== Marshl ===>> josn

  • 根据字段生成json

json ====Unmarshal====>> struct

  • 自动匹配,大小写不敏感
  • 多余字段,直接抛弃
  • 缺少字段,不进行赋值,也不报错

Tag

  1. `json:"-"` 不进行序列化
  2. `json:"name,omitempty"` name0值或空值时,不进行序列化
  3. `json:"number,string" 序列化或者反序列化的时候,若结构体类型和需要的类型不一致,
  4. 可以指定类型,支持string,number和boolean(number和boolean还没搞清楚)

例:

  1. type Hello struct {
  2. Name string
  3. Age int `json:"age,string"`
  4. OK bool `json:"ok,string"`
  5. Num64 int64 `json:"num64,string"`
  6. NumFloat float64 `json:"numFloat,string"`
  7. }
  8. {
  9. "name": "1amdin",
  10. "Age": "123",
  11. "num64": "11231231212323",
  12. "OK": "true",
  13. "numFloat":"1231.123"
  14. }

golang解析Json

  1. //json str 转map
  2. var dat map[string]interface{}
  3. err := json.Unmarshal([]byte(jsonStr), &dat)
  4. //json str 转struct
  5. var config ConfigStruct
  6. err := json.Unmarshal([]byte(jsonStr), &config)
  7. //json str 转struct(部份字段)
  8. var part Other
  9. err := json.Unmarshal([]byte(jsonStr), &part)
  10. 生成json
  11. //map 到json str
  12. enc := json.NewEncoder(os.Stdout)
  13. enc.Encode(dat)
  14. //struct 到json str
  15. if b, err := json.Marshal(config)
  16. //array 到 json str
  17. arr := []string{"hello", "apple", "python", "golang", "base", "peach", "pear"}
  18. lang, err := json.Marshal(arr)
  19. if err == nil {
  20. fmt.Println("================array 到 json str==")
  21. fmt.Println(string(lang))
  22. }
  23. //json 到 []string
  24. var wo []string
  25. if err := json.Unmarshal(lang, &wo); err == nil {
  26. fmt.Println("================json 到 []string==")
  27. fmt.Println(wo)
  28. }

参考

参考文章https://colobu.com/2017/06/21/json-tricks-in-Go/
来自 [https://www.jianshu.com/p/5ccc1c5eb183](https://www.jianshu.com/p/5ccc1c5eb183)