go json的使用: json.Marshal(person):将数据结构转换为json字符串,json.Unmarshal(str, &stu):将json字符串转换为数据结构

1. json.Marshal(person):将数据结构转换为json字符串
type Student struct {
    Name  string `json:"name"`
    Age   int    `json:"age"`
    High  int    `json:"high"`
    Sex   string `json:"sex"`
    Class *Class `json:"class"`
}

type Class struct {
    ClassName string `json:"classname"`
    Grade     int    `json:"grade"`
}

func main() {
    //实例化一个数据结构,用于生成json字符串
    person := Student{
        Name: "张三",
        Age:  18,
        High: 182,
        Sex:  "男",
    }

    //指针变量
    class := new(Class)
    class.ClassName = "1班"
    class.Grade = 3
    person.Class = class

    //Marshal失败时err!=nil
    jsonbyte, err := json.Marshal(person)
    if err != nil {
        fmt.Println("生成json字符串错误")
    }
    //jsonbyte是[]byte类型,转化成string类型便于查看
    fmt.Println(string(jsonbyte))
}
//输出:
//{"name":"张三","age":18,"high":182,"sex":"男","class":{"classname":"1班","grade":3}}


2. json.Unmarshal(str, &stu):将json字符串转换为数据结构
type Student struct {
    Name    interface{} `json:"personname"`
    Age     interface{} `json:"age"`
    High    interface{} `json:"high"`
    Sex     interface{} `json:"sex"`
    Class   interface{} `json:"class"`
    Message interface{} `json:"message"`
}

type Class struct {
    ClassName string `json:"classname"`
    Grade     int    `json:"grade"`
}

func main() {
    //json字符中的"引号,需用\进行转义,否则编译出错
    data := "{\"personname\":\"张三\",\"age\":18,\"high\":182,\"sex\":\"男\",\"class\":{\"classname\":\"1班\",\"grade\":3},\"message\":\"测试成功!\"}"
    //转换格式
    str := []byte(data)

    //Unmarshal的第一个参数是json字符串,第二个参数是接受json解析的数据结构。
    //第二个参数必须是指针,否则无法接收解析的数据,如stu仍为空对象Student{}
    //注:可以直接stu:=new(Student),此时的stu自身就是指针
    stu := Student{}
    err := json.Unmarshal(str, &stu)
    //解析失败会报错,如json字符串格式不对,缺"号,缺}等。
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(stu)
}
//输出:
//{张三 18 182 男 map[classname:1班 grade:3] 测试成功!}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值