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 ...
随机推荐
- 白话 spring AOP
------------------------------------ 剩下的时间不多了,抓经做自己想做的吧 AOP: 专业术语叫做面向切面的编程 为什么要使用aop: 为了简化代码, 将相同代码抽 ...
- Arduino系列之按键模块(二)
上一节简单介绍啦一下按键模块怎么使用 但是在使用过程中会常常出现延时时间过长,有时候按键会失灵 所以,接下来,我将优化程序,使得按键按下时,就能使count加1 下面是程序思路:同样的定义按键脚: 定 ...
- NanUI | NanUI 0.7 正式发布
2020年2月10日 NanUI 0.7版正式发布. 回顾过去的一年,浑浑噩噩.生活上.工作上太多的压力和变数让我身心疲惫,目睹亲人被病痛的摧残的痛苦,无法释怀的生死别离令我沉沦许久:公司业务的变动, ...
- 龙良曲pytorch学习笔记_03
import torch from torch import nn from torch.nn import functional as F from torch import optim impor ...
- 13、FrameRely
Frame Relay 美国国家标准化协会(American National Standard Institute,简称ANSI)国际电信联盟远程通信标准化组 ITU-T 1.是由ITU和ANSI制 ...
- python day02练习和作业
# 1.请用代码实现:利用下划线将列表的每一个元素拼接成字符串,li=[‘alex’, ‘eric’, ‘rain’]# li=['alex','eric','rain']# print('_'.jo ...
- ATL的GUI程序设计(2)
from:http://blog.titilima.com/atlgui-2.html 第二章 一个最简单窗口程序的转型 我知道,可能会有很多朋友对上一章的"Hello, World!&qu ...
- 你都这么拼了,面试官TM怎么还是无动于衷
面试,对于每个人而然并不陌生,可以说是必须经历的一个过程了,小到一场考试,大到企业面试,甚至大型选秀...... 有时自己明明很努力了,但偏偏会在面试环节出了插曲,比如,紧张就是最容易出现的了. 我相 ...
- Codeforces_731_B
http://codeforces.com/problemset/problem/731/B 模拟模拟. #include<iostream> #include<cstring> ...
- sqlserver partitition and partition table --- partition show
I can not believe that I had done this about two years Now we know there is totally different betwee ...