您的位置:首页 > Web前端 > JavaScript

Golang json用法详解(二)

2018-01-02 15:13 513 查看
简介

这下讲一讲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))
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  json golang