映射关系
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
`json:"-"` 不进行序列化`json:"name,omitempty"` name为0值或空值时,不进行序列化`json:"number,string" 序列化或者反序列化的时候,若结构体类型和需要的类型不一致,可以指定类型,支持string,number和boolean(number和boolean还没搞清楚)
例:
type Hello struct {Name stringAge int `json:"age,string"`OK bool `json:"ok,string"`Num64 int64 `json:"num64,string"`NumFloat float64 `json:"numFloat,string"`}{"name": "1amdin","Age": "123","num64": "11231231212323","OK": "true","numFloat":"1231.123"}
golang解析Json
//json str 转mapvar dat map[string]interface{}err := json.Unmarshal([]byte(jsonStr), &dat)//json str 转structvar config ConfigStructerr := json.Unmarshal([]byte(jsonStr), &config)//json str 转struct(部份字段)var part Othererr := json.Unmarshal([]byte(jsonStr), &part)生成json//map 到json strenc := json.NewEncoder(os.Stdout)enc.Encode(dat)//struct 到json strif b, err := json.Marshal(config)//array 到 json strarr := []string{"hello", "apple", "python", "golang", "base", "peach", "pear"}lang, err := json.Marshal(arr)if err == nil {fmt.Println("================array 到 json str==")fmt.Println(string(lang))}//json 到 []stringvar wo []stringif err := json.Unmarshal(lang, &wo); err == nil {fmt.Println("================json 到 []string==")fmt.Println(wo)}
参考
参考文章https://colobu.com/2017/06/21/json-tricks-in-Go/
来自 [https://www.jianshu.com/p/5ccc1c5eb183](https://www.jianshu.com/p/5ccc1c5eb183)
