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 先留个坑
随机推荐
- Java--------------Mysql中时间按要求查询
今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ...
- icomoon字体使用
如何灵活利用免费开源图标字体-IcoMoon篇 by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/w ...
- 解题报告:hdu 3572 Task Schedule(当前弧优化Dinic算法)
Problem Description Our geometry princess XMM has stoped her study in computational geometry to conc ...
- npm install error: MSBUILD : error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”
When I tried to run angular 4 material2 demo on my windows server 2012, got a error message: node-pr ...
- vue中的问题思考
1.为什么 data 要写成函数,而不允许写成对象? 思考:data是 Vue 实例上的一个属性.2. 对象是对于内存地址的引用.3. 函数有自己的作用域空间. 第一点无可厚非,data属性附着于 V ...
- httpclient 3.1跳过https请求SSL的验证
一.因为在使用https发送请求的时候会涉及,验证方式.但是这种方式在使用的时候很不方便.特别是在请求外部接口的时候,所以这我写了一个跳过验证的方式.(供参考) 二.加入包,这里用的是commons- ...
- [已读]基于MVC的Javascript Web 富应用开发
这本书是12年出版,我买的时间应该是13年,书架上唯一一本盗版→ → 但是看完是在今年. 因为刚拿到的时候,读起来很是磕磕绊绊,就搁置了蛮久.到第二次拿起来的时候,发现已经有部分内容过时,但我还是觉得 ...
- 让jquery.tmpl支持序号${index}
参考 http://blog.csdn.net/wangji5850/article/details/50913121 压缩的查找第一个map,添加 jQuery.map( h, function( ...
- web前端怎么样才能入门
web前端怎么样才能入门,首先我们要从什么是初级web前端工程师说起: 按照我的想法,我把前端工程师分为了入门.初级.中级.高级这四个级别: 入门级别指的是了解什么是前端(前端到底是什么其实很多人还是 ...
- Redis为什么这么快
Redis为什么这么快 1.完全基于内存,绝大部分请求是纯粹的内存操作,非常快速.数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1): 2.数据结构简单, ...