序列化

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 序列化的更多相关文章

  1. 【.net 深呼吸】序列化中的“引用保留”

    假设 K 类中有两个属性/字段的类型相同,并且它们引用的是同一个对象实例,在序列化的默认处理中,会为每个引用单独生成数据. 看看下面两个类. [DataContract] public class 帅 ...

  2. 【.net 深呼吸】设置序列化中的最大数据量

    欢迎收看本期的<老周吹牛>节目,由于剧组严重缺钱,故本节目无视频无声音.好,先看下面一个类声明. [DataContract] public class DemoObject { [Dat ...

  3. 用dubbo时遇到的一个序列化的坑

    首先,这是标题党,问题并不是出现在序列化上,这是报错的一部分: Caused by: com.alibaba.dubbo.remoting.RemotingException: Failed to s ...

  4. Unity 序列化

    Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http://docs ...

  5. Unity 序列化 总结

    查找了 Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http:// ...

  6. [C#] C# 知识回顾 - 序列化

    C# 知识回顾 -  序列化 [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902005.html 目录 序列化的含义 通过序列化保存对象数据 众 ...

  7. Newtonsoft.Json设置类的属性不序列化

    参考页面: http://www.yuanjiaocheng.net/webapi/parameter-binding.html http://www.yuanjiaocheng.net/webapi ...

  8. C# 序列化与反序列化几种格式的转换

    这里介绍了几种方式之间的序列化与反序列化之间的转换 首先介绍的如何序列化,将object对象序列化常见的两种方式即string和xml对象; 第一种将object转换为string对象,这种比较简单没 ...

  9. Netty实现高性能RPC服务器优化篇之消息序列化

    在本人写的前一篇文章中,谈及有关如何利用Netty开发实现,高性能RPC服务器的一些设计思路.设计原理,以及具体的实现方案(具体参见:谈谈如何使用Netty开发实现高性能的RPC服务器).在文章的最后 ...

  10. .Net深入实战系列—JSON序列化那点事儿

    序 当前主流的序列化JSON字符串主要有两种方式:JavaScriptSerializer及Json.net(Nuget标识:Newtonsoft.Json).JavaScriptSerializer ...

随机推荐

  1. 每日一技|巧用 Telnet 调试 Dubbo 服务

    个人博客地址 studyidea.cn,点击查看更多原创文章 0x00. 前言 想象这样一个场景,线上某个服务突发异常,导致上游服务调用异常,数据处于中间状态.服务恢复之后,我们需要修复这笔数据至正常 ...

  2. day01_前言、入门程序、常量、变量

    day01_前言.入门程序.常量.变量 sysout :System.out.println(); Java 概述 本节主要内容: java 概述.常 DOS 命令.JRE.JDK 与 JVM.环境搭 ...

  3. docker 镜像位置切换

    发生现象: 在windows10下安装Docker for windows,随着用docker pull image文件后,C盘的容量越来越小了,你可能也有一种跟我一样的想法,想改变默认的安装路径,本 ...

  4. maven项目pom.xml加载本地jar,自定义jar

    将jar放到resource目录下面: pom添加配置 <!-- 加载IK自定义 依赖--> <dependency> <groupId>com.ik.up< ...

  5. Docker深入浅出系列 | 单节点多容器网络通信

    目录 教程目标 准备工作 带着问题开车 同一主机两个容器如何相互通信? 怎么从服务器外访问容器 Docker的三种网络模式是什么 Docker网络通信原理 计算机网络模型回顾 Linux中的网卡 查看 ...

  6. js中函数this的指向

    this 在面试中,js指向也常常被问到,在开发过程中也是一个需要注意的问题,严格模式下的this指向undefined,这里就不讨论. 普通函数 记住一句话哪个对象调用函数,该函数的this就指向该 ...

  7. 手把手教你用C#做疫情传播仿真

    手把手教你用C#做疫情传播仿真 在上篇文章中,我介绍了用C#做的疫情传播仿真程序的使用和配置,演示了其运行效果,但没有着重讲其中的代码. 今天我将抽丝剥茧,手把手分析程序的架构,以及妙趣横生的细节. ...

  8. 整合dubbo的依赖

    <!-- 版本信息 --> <properties> <dubbo.version>2.7.3</dubbo.version> <maven-ja ...

  9. 数学建模之优劣解距法(TOPSIS)

    优劣解距法简称TOPSIS,是一种综合评价方法,利用原始数据反映各评价方案之间的差距 优劣解距法的步骤通常为: 先将原始数据针具做正向化处理,得到正向化矩阵 再对正向化矩阵标准化处理以消除各指标纲量的 ...

  10. Ceph 存储集群1-配置:硬盘和文件系统、配置 Ceph、网络选项、认证选项和监控器选项

    所有 Ceph 部署都始于 Ceph 存储集群.基于 RADOS 的 Ceph 对象存储集群包括两类守护进程: 1.对象存储守护进程( OSD )把存储节点上的数据存储为对象: 2.Ceph 监视器( ...