在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1 json.Marshal 把对象转换为JSON的方法 原型如下 func Marshal(v interface{}) ([]byte, error)
例子: type Movie struct { Title string Year int `json:"released"` Color bool `json:"color,omitempty"` Actors []string notex int } movies := []Movie{ {Title: "Casablanca", Year: 1942, Color: false, Actors: []string{"Humphrey Bogart", "Ingrid Bergman"}, notex: 100}, {Title: "Cool Hand Luke", Year: 1967, Color: true, Actors: []string{"Paul Newman"}, notex: 200}, {Title: "Bullitt", Year: 1968, Color: true, Actors: []string{"Steve McQueen", "Jacqueline Bisset"}, notex: 300}, // ... } data, err := json.Marshal(movies) if err != nil { //log.Fatalf("JSON marshaling failed: %s", err) } fmt.Printf("%s\n", data) 注:
2 结构体标签 如果希望手动配置结构体的成员和JSON字段的对应关系,可以在定义结构体的时候给成员打标签。使用omitempty,如果该字段为nil或0值(数字0,字符串"",空数组[]等),则打包的JSON结果不会有这个字段。比如
3 json.RawMessage json.RawMessage其实就是[]byte类型的重定义。可以进行强制类型转换。 现在有这么一种场景,结构体中的其中一个字段的格式是未知的:
使用json.RawMessage的话,Args字段在Unmarshal时不会被解析,直接将字节数据赋值给Args。我们可以能先解包第一层的JSON数据,然后根据Cmd的值,再确定Args的具体类型进行第二次Unmarshal。 这里要注意的是,一定要使用指针类型*json.RawMessage,否则在Args会被认为是[]byte类型,在打包时会被打包成base64编码的字符串
|
请发表评论