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 先留个坑
随机推荐
- 3DMAX 8 角色建模2 身体
身体 20 25 60 分段 3 2 3 位置直接设置到-12.5 0 0,删除内部面,实例镜像出另一半x偏移25 1 身体大体形状 ,,,, 2 背阔肌 , 3腹肌 4 臀部 ,, 5 肩部 调整点 ...
- Cg(c for graphic)语言的数据类(转)
抄“GPU Programming And Cg Language Primer 1rd Edition” 中文名“GPU编程与CG语言之阳春白雪下里巴人” 本章将着重介绍Cg语言中预定义的内置(bu ...
- 树链剖分学习笔记 By cellur925
先%一发机房各路祖传树剖大师%%%. 近来总有人向我安利树剖求LCA,然鹅我还是最爱树上倍增.然鹅又发现近年一些题目(如天天爱跑步.运输计划等在树上进行操作的题目),我有把树转化为一条链求解的思路,但 ...
- SpringMVC中Freemarker获取项目根目录
https://blog.csdn.net/whatlookingfor/article/details/51538995 在SpringMVC框架中使用Freemarker试图时,要获取根路径的方式 ...
- 2017年“嘉杰信息杯” 中国大学生程序设计竞赛全国邀请赛 Highway
Highway Accepted : 122 Submit : 393 Time Limit : 4000 MS Memory Limit : 65536 KB Highway In ICPC ...
- 题解报告:hdu 4607 Park Visit(最长链)
Problem Description Claire and her little friend, ykwd, are travelling in Shevchenko's Park! The par ...
- normal曲线绘制
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q ...
- P1851 好朋友
题目背景 小可可和所有其他同学的手腕上都戴有一个射频识别序列号码牌,这样老师就可以方便的计算出他们的人数.很多同学都有一个“好朋友” .如果 A 的序列号的约数之和恰好等于B 的序列号,那么 A的好朋 ...
- AJPFX谈JAVA新手问题之异常处理使用不当
★空的 catch 语句块 犯这种错误的人比较少,一般发生在刚学会 Java 或者刚参加工作不久的人身上. 所谓“空 catch 语句块”就是在 catch 语句块中没有对异常作任何处理(比如记错误日 ...
- C++模板类头文件和实现文件分离
http://www.cnblogs.com/lvdongjie/p/4288373.html 如何实现C++模板类头文件和实现文件分离,这个问题和编译器有关. 引用<<C++primer ...