博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go:json(序列化、反序列化)
阅读量:6655 次
发布时间:2019-06-25

本文共 2490 字,大约阅读时间需要 8 分钟。

一、示例

package mainimport (    "encoding/json"    "fmt")type Person struct {    Name    string  `json:"name"`    Age     int     `json:"age"`    Salary  float64 `json:"salary"`}type Student struct {    Name    string  `json:"name"`    Age     int     `json:"age"`    Salary  float64 `json:"salary"`}// 对数据进行序列化func marshalData(data interface{}) []byte{    data, err := json.Marshal(data)    if err != nil {        fmt.Printf("序列化失败:%s\n", err)    }    fmt.Printf("序列化结果:%v\n", data)    fmt.Printf("序列化结果:%s\n", data)    return data.([]byte)}// 对 struct 进行序列化func marshalStruct() []byte {    person := Person{        Name: "佩奇",        Age: 18,        Salary: 99.99,    }    fmt.Printf("原始的数据:%v\n", person)    return marshalData(person)}// 对 map 进行序列化func marshalMap() []byte {    var m map[string]interface{}    m = make(map[string]interface{})    m["name"] = "盲僧"    m["age"] = 10    m["hobby"] = [2]string{"篮球", "游泳"}    fmt.Printf("原始的数据:%v\n", m)    return marshalData(m)}// 对 map 切片进行序列化func marshalSlice() []byte {    var slice []map[string]interface{}    m1 := map[string]interface{}{        "name": "妖姬",        "age": 20,    }    slice = append(slice, m1)    m2 := map[string]interface{}{        "name": "德玛",        "age": 30,    }    slice = append(slice, m2)    fmt.Printf("原始的数据:%v\n", slice)    return marshalData(slice)}// 反序列化成 structfunc unmarshalStruct(data []byte) {    // 定义一个 Student 实例    var student Student    err := json.Unmarshal([]byte(data), &student)    if err != nil {        fmt.Println(err)    }    fmt.Println("反序列化结果:", student)}// 反序列化成 mapfunc unmarshalMap(data []byte) {    // 定义一个 map    var m map[string]interface{}    // 注意:反序列化 map,不需要 make,因为 make 操作被封装到了 Unmarsha 函数中    err := json.Unmarshal([]byte(data), &m)    if err != nil {        fmt.Println(err)    }    fmt.Println("反序列化结果:", m)}// 反序列化成 slicefunc unmarshalSlice(data []byte) {    // 定义一个 silce    var slice []map[string]interface{}    // 注意:反序列化 slice,不需要 make,因为 make 操作被封装到了 Unmarsha 函数中    err := json.Unmarshal([]byte(data), &slice)    if err != nil {        fmt.Println(err)    }    fmt.Println("反序列化结果:", slice)}func main() {    // 序列化    result1 := marshalStruct()    fmt.Println()    result2 := marshalMap()    fmt.Println()    result3 := marshalSlice()    fmt.Println()    // 反序列化    unmarshalStruct(result1)    unmarshalMap(result2)    unmarshalSlice(result3)}
View Code

二、注意!!!

在反序列化一个 json 字符串时,要确保反序列化后的数据类型和序列化之前的数据类型一致。

转载于:https://www.cnblogs.com/believepd/p/10952897.html

你可能感兴趣的文章
private、public、protected和默认
查看>>
怎么解决eclipse的source not found change at.
查看>>
构建之法进度05
查看>>
js基础知识1
查看>>
由<a>标签的onclick影出来的问题
查看>>
ul li的添加 删除 复制 clone()
查看>>
grunt-2x2x
查看>>
一种基于浏览器的自动小票机打印实现方案
查看>>
序列化流与反序列化流,打印流
查看>>
增强For循环
查看>>
Ubuntu 17.04 搭建 NodeJS
查看>>
ibatis - 映射文件详解
查看>>
memcached应用场景(转)
查看>>
sharepointWebPart开发、部署、发布过程全记录
查看>>
Oracle 新增删除账户
查看>>
andorid 网格视图GridView
查看>>
龙创科技公众号支付
查看>>
Linux学习
查看>>
pythonGUI编程打开默认浏览器
查看>>
5200 fqy的难题----2的疯狂幂
查看>>