json序列化 (gob标准库)

2024-09-04 16:58
文章标签 json 序列化 标准 gob

本文主要是介绍json序列化 (gob标准库),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

json序列化 (gob标准库)

type s struct {data map[string]interface{}
}

1.json序列化
会将 int 类型,转化成float64。

func jsonDemo() {var s1 = s{data: make(map[string]interface{}, 8),}s1.data["count"] = 1ret, err := json.Marshal(s1.data)if err != nil {fmt.Println("marshal failed", err)}fmt.Printf("%#v\n", string(ret))var s2 = s{data: make(map[string]interface{}, 8),}err = json.Unmarshal(ret, &s2.data)if err != nil {fmt.Println("unmarshal failed", err)}fmt.Println(s2)for _, v := range s2.data {fmt.Printf("value:%v, type:%T\n", v, v)}
}输出结果:
"{\"count\":1}"
{map[count:1]}
value:1, type:float64

2.gob序列化

标准库gob是golang提供的“私有”的编解码方式,它的效率会比json,xml等更高,特别适合在Go语言程序间传递数据。

func gobDemo() {var s1 = s{data: make(map[string]interface{}, 8),}s1.data["count"] = 1// encodebuf := new(bytes.Buffer)enc := gob.NewEncoder(buf)err := enc.Encode(s1.data)if err != nil {fmt.Println("gob encode failed, err:", err)return}b := buf.Bytes()fmt.Println(b)var s2 = s{data: make(map[string]interface{}, 8),}// decodedec := gob.NewDecoder(bytes.NewBuffer(b))err = dec.Decode(&s2.data)if err != nil {fmt.Println("gob decode failed, err", err)return}fmt.Println(s2.data)for _, v := range s2.data {fmt.Printf("value:%v, type:%T\n", v, v)}
}

3.msgpack:

​ MessagePack是一种高效的二进制序列化格式。它允许你在多种语言(如JSON)之间交换数据。但它更快更小。

go get -u github.com/vmihailenco/msgpack
package mainimport ("fmt""github.com/vmihailenco/msgpack"
)// msgpack demotype Person struct {Name   stringAge    intGender string
}func main() {p1 := Person{Name:   "沙河娜扎",Age:    18,Gender: "男",}// marshalb, err := msgpack.Marshal(p1)if err != nil {fmt.Printf("msgpack marshal failed,err:%v", err)return}// unmarshalvar p2 Personerr = msgpack.Unmarshal(b, &p2)if err != nil {fmt.Printf("msgpack unmarshal failed,err:%v", err)return}fmt.Printf("p2:%#v\n", p2) // p2:main.Person{Name:"沙河娜扎", Age:18, Gender:"男"}
}

这篇关于json序列化 (gob标准库)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136498

相关文章

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

Olingo分析和实践之EDM 辅助序列化器详解(最佳实践)

《Olingo分析和实践之EDM辅助序列化器详解(最佳实践)》EDM辅助序列化器是ApacheOlingoOData框架中无需完整EDM模型的智能序列化工具,通过运行时类型推断实现灵活数据转换,适用... 目录概念与定义什么是 EDM 辅助序列化器?核心概念设计目标核心特点1. EDM 信息可选2. 智能类

MySQL 8 中的一个强大功能 JSON_TABLE示例详解

《MySQL8中的一个强大功能JSON_TABLE示例详解》JSON_TABLE是MySQL8中引入的一个强大功能,它允许用户将JSON数据转换为关系表格式,从而可以更方便地在SQL查询中处理J... 目录基本语法示例示例查询解释应用场景不适用场景1. ‌jsON 数据结构过于复杂或动态变化‌2. ‌性能要

Spring的RedisTemplate的json反序列泛型丢失问题解决

《Spring的RedisTemplate的json反序列泛型丢失问题解决》本文主要介绍了SpringRedisTemplate中使用JSON序列化时泛型信息丢失的问题及其提出三种解决方案,可以根据性... 目录背景解决方案方案一方案二方案三总结背景在使用RedisTemplate操作redis时我们针对

SpringSecurity整合redission序列化问题小结(最新整理)

《SpringSecurity整合redission序列化问题小结(最新整理)》文章详解SpringSecurity整合Redisson时的序列化问题,指出需排除官方Jackson依赖,通过自定义反序... 目录1. 前言2. Redission配置2.1 RedissonProperties2.2 Red

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri