映射关系
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 string
Age 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 转map
var dat map[string]interface{}
err := json.Unmarshal([]byte(jsonStr), &dat)
//json str 转struct
var config ConfigStruct
err := json.Unmarshal([]byte(jsonStr), &config)
//json str 转struct(部份字段)
var part Other
err := json.Unmarshal([]byte(jsonStr), &part)
生成json
//map 到json str
enc := json.NewEncoder(os.Stdout)
enc.Encode(dat)
//struct 到json str
if b, err := json.Marshal(config)
//array 到 json str
arr := []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 到 []string
var wo []string
if 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)