Golang json用法详解(二)
2018-01-02 15:13
513 查看
简介
这下讲一讲Golang如何自定义解析JSON,Golang自带的JSON解析功能非常强悍
说明
很多时候,我们可能遇到这样的场景,就是远端返回的JSON数据不是你想要的类型,或者你想做额外的操作,比如在解析的过程中进行校验,或者类型转换,那么我们可以这样或者在解析过程中进行数据转换
实例
这下讲一讲Golang如何自定义解析JSON,Golang自带的JSON解析功能非常强悍
说明
很多时候,我们可能遇到这样的场景,就是远端返回的JSON数据不是你想要的类型,或者你想做额外的操作,比如在解析的过程中进行校验,或者类型转换,那么我们可以这样或者在解析过程中进行数据转换
实例
package main import ( "bytes" "encoding/json" "fmt" ) // Mail _ type Mail struct { Value string } // UnmarshalJSON _ func (m *Mail) UnmarshalJSON(data []byte) error { // 这里简单演示一下,简单判断即可 if bytes.Contains(data, []byte("@")) { } else { return fmt.Errorf("mail format error") } m.Value = string(data) return nil } // UnmarshalJSON _ func (m *Mail) MarshalJSON() (data []byte, err error) { if m != nil { data = []byte(m.Value) } return } // Phone _ type Phone struct { Value string } // UnmarshalJSON _ func (p *Phone) UnmarshalJSON(data []byte) error { // 这里简单演示一下,简单判断即可 if len(data) != 11 { return fmt.Errorf("phone format error") } p.Value = string(data) return nil } // UnmarshalJSON _ func (p *Phone) MarshalJSON() (data []byte, err error) { if p != nil { data = []byte(p.Value) } return } // UserRequest _ type UserRequest struct { Name string Mail Mail Phone Phone } func AddUser(data []byte) error { user := &UserRequest{} err := json.Unmarshal(data, user) if err != nil { return err } return nil // TODO } func main() { user := UserRequest{} user.Name = "ysy" user.Mail.Value = "yangshiyu@x.com" user.Phone.Value = "18900001111" // fmt.Println(user) b, err := json.Marshal(user) fmt.Println(err) fmt.Println(AddUser(b)) }
相关文章推荐
- 深入Golang之context的用法详解
- JSON详解+ C# String.Format格式说明+ C# ListView用法详解 很完整
- golang json性能分析详解
- JSON.stringify 用法详解
- jQuery中$.get、$.post、$.getJSON和$.ajax的用法详解
- Jquery中getJson函数用法实例详解
- Golang strings 包 用法详解
- jsoncpp用法详解
- Golang map如何生成有序的json数据详解
- golang如何自定义json序列化应用详解
- 详解JSONObject和JSONArray区别及基本用法
- JSON数据 json.stringify()用法详解
- JSONObject和Gson用法详解
- golang包time用法详解
- php数组转换js数组操作及json_encode的用法详解
- JSONObject用法详解
- jQuery中$.get、$.post、$.getJSON和$.ajax的用法详解
- Golang中切片的用法与本质详解
- golang格式化输出-fmt包用法详解