Go:json(序列化、反序列化)
一、示例
package main import (
"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)
} // 反序列化成 struct
func unmarshalStruct(data []byte) {
// 定义一个 Student 实例
var student Student
err := json.Unmarshal([]byte(data), &student)
if err != nil {
fmt.Println(err)
}
fmt.Println("反序列化结果:", student)
} // 反序列化成 map
func 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)
} // 反序列化成 slice
func 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)
}

二、注意!!!
在反序列化一个 json 字符串时,要确保反序列化后的数据类型和序列化之前的数据类型一致。
Go:json(序列化、反序列化)的更多相关文章
- json序列化 & 反序列化
json序列化: json的dumps方法可以将json格式数据序列为python的相关数据类型,比如str,常用于打印,另外,在序列化时,中文汉字被转换为unicode编码,在dumps函数中添加参 ...
- json序列化反序列化Jackson相关注解
1.@Transient @Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性:如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM框架 ...
- C语言JSON序列化/反序列化
最近想找一个C语言处理嵌套结构体和结构体数组的json库,理想的是能够很容易处理复杂结构体嵌套,并且使用简单的,但是没找到比较合适的,于是打算自己封装一个: 两个问题: C语言结构体本身没有元数据,这 ...
- nodejs - json序列化&反序列化示例
// demo-json.js var obj = { "name": "LiLi", "age": 22, "sex" ...
- spring cloud jackson 枚举json互转 枚举json序列化/反序列化
先定义一个枚举基类 import com.fasterxml.jackson.databind.annotation.JsonDeserialize; @JsonDeserialize(using = ...
- Newtonsoft.Json 序列化反序列化
public class People { public string name { get; set; } public string age { get; set; } public string ...
- 怎样在ASP.NET(C#) 使用Json序列化反序列化问题?
using System; using System.Collections.Generic; using System.Web; using System.Web.Script.Serializat ...
- JSON序列化反序列化
JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集. JSON采用完全独立于语言的文本格式,可以很容易在 ...
- ASP.NET(C#) Json序列化反序列化帮助类Jsonhelper
原文地址:https://ken.io/note/csharp-asp.net-jsonhelper using System; using System.Collections.Generic; u ...
- 关于spring中请求返回值的json序列化/反序列化问题
https://cloud.tencent.com/developer/article/1381083 https://www.jianshu.com/p/db07543ffe0a 先留个坑
随机推荐
- spoj SUBLEX - Lexicographical Substring Search【SAM】
先求出SAM,然后考虑定义,点u是一个right集合,代表了长为dis[son]+1~dis[u]的串,然后根据有向边转移是添加一个字符,所以可以根据这个预处理出si[u],表示串u后加字符能有几个本 ...
- Linux下自动还原MySQL数据库的Shell脚本
创建shell脚本topjui_source.exp,内容如下: #!/usr/bin/expect spawn echo "###### running... ######" s ...
- js实时获取并显示当前时间的方法
- PTA天梯赛训练题L1-064:估值一亿的AI核心代码(字符串模拟)
Update:smz说regex秒过Orz,yzd记在这里了. 听说今年天梯赛有个烦人的模拟,我便被队友逼着试做一下……一发15,二发20.记一记,要不然枉费我写这么久…… 自己还是代码能力太菜了,校 ...
- Educational Codeforces Round 24 E
Vova again tries to play some computer card game. The rules of deck creation in this game are simple ...
- 位运算 UEST 84 Binary Operations
题目传送门 题意:所有连续的子序列的三种位运算计算后的值的和的期望分别是多少 分析:因为所有连续子序列的组数有n * (n + 1) / 2种,所以要将他们分类降低复杂度,以ai为结尾的分成一组,至于 ...
- 阻止默认行为是配合passive使用
在使用lighthouse检测pwa应用时,发现提示下面有下面的警告 默认使用passive:true提高滚动性能并减少崩溃,passive即顺从的,是指它顺从浏览器的默认行为.设置该属性的目的主要是 ...
- h5-16-SVG 与 HTML5 的 canvas 各自特点
1. Canvas是使用JavaScript程序绘图(动态生成),SVG是使用XML文档描述来绘图.2.SVG更适合用来做动态交互,而且SVG绘图很容易编辑,只需要增加或移除相应的元素就可以了.同时S ...
- getAttribute()方法的第二个参数
对于一个img元素,我们想获取它的src属性时可以有两种方式: 1.xxx.getAttribute("src") 2.直接通过xxx.src获取属性值 在src的属性值为相对路径 ...
- Suricata的总体架构
Suricata的总体架构 报文检测系统通常四大部分,报文获取.报文解码.报文检测.日志记录:suricata不同的功能安装模块划分,一个模块的输出是另一个模块的输入,suricata通过线程将模块 ...