go 序列化
序列化
package main import (
"encoding/json"
"fmt"
) //结构体
type Monster struct {
Name string
Age int
Birthday string
Sal float64
Skill string
} //结构体 增加tag标签
type Monster2 struct {
Name string `json:"monster"`//反射机制
Age int `json:"age"`
Birthday string `json:"birthday"`
Sal float64 `json:"sal"`
Skill string `json:"skill"`
}
//结构体序列化
func testStruct(){
monster:=Monster{
Name: "牛魔王",
Age: ,
Birthday: "2011-11-11",
Sal: ,
Skill: "牛魔圈",
}
//序列化
data,err:=json.Marshal(&monster)
if err!=nil{
fmt.Printf("序列化错误 err=%v\n",err)
}
fmt.Printf("monster 序列化后=%v\n",string(data)) } //结构体序列化 增加tag,字段自定义
func testStruct2(){
monster:=Monster2{
Name: "牛魔王",
Age: ,
Birthday: "2011-11-11",
Sal: ,
Skill: "牛魔圈",
}
//序列化
data,err:=json.Marshal(&monster)
if err!=nil{
fmt.Printf("序列化错误 err=%v\n",err)
}
fmt.Printf("monster 序列化后=%v\n",string(data)) }
//map序列化
func testMap(){
var a map[string]interface{}
a=make(map[string]interface{})
a["name"]="红孩儿"
a["age"]=
a["address"]="火云洞"
//序列化
data,err:=json.Marshal(a)
if err!=nil{
fmt.Printf("序列化错误 err=%v\n",err)
} fmt.Printf("a map序列化后=%v\n",string(data))
}
//切片序列化
func testSlice(){
var slice []map[string]interface{}
var m1 map[string]interface{}
m1=make(map[string]interface{})
m1["name"]="jack"
m1["age"]=""
m1["address"]="北京"
slice=append(slice,m1) var m2 map[string]interface{}
m2=make(map[string]interface{})
m2["name"]="tom"
m2["age"]=""
m2["address"]=[]string{"墨西哥","夏威夷"}
slice=append(slice,m2)
data,err:=json.Marshal(slice)
if err!=nil{
fmt.Printf("序列化错误 err=%v\n",err)
}
fmt.Printf("slice 序列化后=%v\n",string(data))
} //对基本数据类型序列化意义不大
func testFloat64(){
var num1 float64 =123456.45
data,err:=json.Marshal(num1)
if err!=nil{
fmt.Printf("序列化错误 err=%v\n",err)
}
fmt.Printf("float64 序列化后=%v\n",string(data))
} func main() { //testStruct()
//testMap()
//testSlice()
//testFloat64()
testStruct2()
}
反序列化
package main import (
"encoding/json"
"fmt"
) type Monster struct {
Name string
Age int
Birthday string
Sal float64
Skill string
} //演示将json字符串,反序列化成struct
func unmarshalStruct() {
str := "{\"Name\":\"牛魔王\",\"Age\":500,\"Birthday\":\"2011-11-11\",\"Sal\":18222,\"Skill\":\"牛魔圈\"}" var monster Monster
err := json.Unmarshal([]byte(str), &monster)
if err != nil {
fmt.Printf("unmarshal err=%v\n", err)
}
fmt.Printf("反序列化后 monster=%v monster.Name=%v \n", monster, monster.Name)
} //将json字符串,反序列化成map
func unmarshaMap() {
str := "{\"address\":\"火云洞\",\"age\":30,\"name\":\"红孩儿\"}"
var a map[string]interface{}
//反序列化
//注意,反序列化不需要make,因为mak被封装到Unmarshal函数
err := json.Unmarshal([]byte(str), &a)
if err != nil {
fmt.Printf("unmarshal err=%v\n", err)
}
fmt.Printf("反序列化 a=%v\n", a)
} //将json字符串,反序列化成切片
func unmarshalSlice() {
str := "[{\"address\":\"北京\",\"age\":\"7\",\"name\":\"jack\"},{\"address\":[\"墨西哥\",\"夏威夷\"],\"age\":\"20\",\"name\":\"tom\"}]"
//定义一个slice
var slice []map[string]interface{}
//反序列化,不需要make,因为make操作被封装到Unmarshal函数
err := json.Unmarshal([]byte(str), &slice)
if err != nil {
fmt.Printf("unmarshal err=%v \n", err)
}
fmt.Printf("反序列化后slice=%v\n", slice)
}
/*
总结
1.反序列化json字符串,前后数据类型必须一致
2.如果json是通过程序获取的,则不需要手动转义 */
func main() {
//unmarshalStruct()
//unmarshaMap()
unmarshalSlice()
}
go 序列化的更多相关文章
- 【.net 深呼吸】序列化中的“引用保留”
假设 K 类中有两个属性/字段的类型相同,并且它们引用的是同一个对象实例,在序列化的默认处理中,会为每个引用单独生成数据. 看看下面两个类. [DataContract] public class 帅 ...
- 【.net 深呼吸】设置序列化中的最大数据量
欢迎收看本期的<老周吹牛>节目,由于剧组严重缺钱,故本节目无视频无声音.好,先看下面一个类声明. [DataContract] public class DemoObject { [Dat ...
- 用dubbo时遇到的一个序列化的坑
首先,这是标题党,问题并不是出现在序列化上,这是报错的一部分: Caused by: com.alibaba.dubbo.remoting.RemotingException: Failed to s ...
- Unity 序列化
Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http://docs ...
- Unity 序列化 总结
查找了 Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http:// ...
- [C#] C# 知识回顾 - 序列化
C# 知识回顾 - 序列化 [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902005.html 目录 序列化的含义 通过序列化保存对象数据 众 ...
- Newtonsoft.Json设置类的属性不序列化
参考页面: http://www.yuanjiaocheng.net/webapi/parameter-binding.html http://www.yuanjiaocheng.net/webapi ...
- C# 序列化与反序列化几种格式的转换
这里介绍了几种方式之间的序列化与反序列化之间的转换 首先介绍的如何序列化,将object对象序列化常见的两种方式即string和xml对象; 第一种将object转换为string对象,这种比较简单没 ...
- Netty实现高性能RPC服务器优化篇之消息序列化
在本人写的前一篇文章中,谈及有关如何利用Netty开发实现,高性能RPC服务器的一些设计思路.设计原理,以及具体的实现方案(具体参见:谈谈如何使用Netty开发实现高性能的RPC服务器).在文章的最后 ...
- .Net深入实战系列—JSON序列化那点事儿
序 当前主流的序列化JSON字符串主要有两种方式:JavaScriptSerializer及Json.net(Nuget标识:Newtonsoft.Json).JavaScriptSerializer ...
随机推荐
- Windows PHP 开启opcache的方法
PHP opcache可以提升性能.Windows PHP 配置 opcache 的方法如下: 1.先检查PHP目录下ext目录中有没有php_opcache.dll,没有的话自己下载(PHP 5.5 ...
- mysql--->profile使用
Mysql分析-profile详解 简介 Profiling是从 mysql5.0.3版本以后才开放的. 启动profile之后,所有查询包括错误的语句都会记录在内. 此工具可用来查询SQL执行状态, ...
- Redis异常 | DENIED Redis is running in protected mode because protected mode is enabled
背景 今天重新搭了个redis环境,用简单的代码去测试下是否正常, @RunWith(SpringRunner.class) @SpringBootTest public class Springbo ...
- HTML简介介绍
网页概述 网页:纯文本格式的文件:(以村文本格式编写,后缀名改为HTML的文本文件) ---- 网站:多个网页的集合: ---- 主页:打开网站后显示的第一个页面: ---- 浏览器:将纯文本格式的文 ...
- 1755: N相关孪生素数
#include<stdio.h>int f(int n,int L,int R){ int ch[10000],i,j,count=0; j=1; for(i=L;i<=R;i++ ...
- 机器学习(ML)九之GRU、LSTM、深度神经网络、双向循环神经网络
门控循环单元(GRU) 循环神经网络中的梯度计算方法.当时间步数较大或者时间步较小时,循环神经网络的梯度较容易出现衰减或爆炸.虽然裁剪梯度可以应对梯度爆炸,但无法解决梯度衰减的问题.通常由于这个原因, ...
- WARNING OGG-00706 Failed to add supplemental log group on table
在配置OGG时,需要给同步的表添加补充日志,在ggsci命令行执行 add trandata user.table SQL> desc jack.t1 Name Null? Type --- ...
- Spark Streaming运行流程及源码解析(一)
本系列主要描述Spark Streaming的运行流程,然后对每个流程的源码分别进行解析 之前总听同事说Spark源码有多么棒,咱也不知道,就是疯狂点头.今天也来撸一下Spark源码. 对Spark的 ...
- Thread Based Parallelism - Thread in a Subclass
Thread Based Parallelism - Thread in a Subclass 1 import threading import time exit_Flag = 0 class m ...
- React之深入了解虚拟DOM
JS在手机中也可运行,React Native通过将虚拟DOM转换为底层的原生组件,即可在手机端运行,在浏览器运行时,只需要将虚拟DOM转换为真实DOM即可运行,虚拟DOM就是将真实DOM转换为JS对 ...