当前位置: 首页 > news >正文

golang 标准库json Marshal 序列化与反序列化

标准库代码

func Marshal(v any) ([]byte, error) {e := newEncodeState()defer encodeStatePool.Put(e)err := e.marshal(v, encOpts{escapeHTML: true})if err != nil {return nil, err}buf := append([]byte(nil), e.Bytes()...)return buf, nil
}func Unmarshal(data []byte, v any) error {// Check for well-formedness.// Avoids filling out half a data structure// before discovering a JSON syntax error.var d decodeStateerr := checkValid(data, &d.scan)if err != nil {return err}d.init(data)return d.unmarshal(v)
}

一、单个值序列化与反序列化

	aaaa := 321aa2, err := json.Marshal(aaaa)//序列化if err != nil {fmt.Printf("err: %v\n", err)}fmt.Printf("aa2: %v\n", aa2) //aa2: [51 50 49]var a1 interr = json.Unmarshal(aa2, &a1) //反序列化fmt.Printf("a1: %v %[1]T\n", a1) //a1: 321 int

二、结构体

package mainimport ("encoding/json""fmt"
)type Strcut1 struct {Name  stringAge   intHight int
}func main() {//一、结构体序列化与反序列化sperson := []Strcut1{ //person结构类型的切片{"aa", 3, 54},{"aa", 2, 54},{"aa", 6, 54},{"aa", 3, 52},{"aa", 12, 15},}//序列化sp1, err := json.Marshal(sperson)if err != nil {fmt.Printf("err: %v\n", err)}fmt.Printf("sp1: %T %[1]s %[1]v\n", sp1) //[]uint8 [{"Name":"aa","Age":3,"Hight":54},{"Name":"aa","Age":2,"Hight":54},{"Name":"aa","Age":6,"Hight":54},{"Name":"aa","Age":3,"Hight":52},{"Name":"aa","Age":12,"Hight":15}] [91 123 34 78 97 109 101 34 58 34 97 97 34 44 34 65 103 101 34 58 51 44 34 72 105 103 104 116 34 58 53 52 125 44 123 34 78 97 109 101 34 58 34 97 97 34 44 34 65 103 101 34 58 50 44 34 72 105 103 104 116 34 58 53 52 125 44 123 34 78 97 109 101 34 58 34 97 97 34 44 34 65 103 101 34 58 54 44 34 72 105 103 104 116 34 58 53 52 125 44 123 34 78 97 109 101 34 58 34 97 97 34 44 34 65 103 101 34 58 51 44 34 72 105 103 104 116 34 58 53 50 125 44 123 34 78 97 109 101 34 58 34 97 97 34 44 34 65 103 101 34 58 49 50 44 34 72 105 103 104 116 34 58 49 53 125 93]//反序列化var desp1 []Strcut1 //接收err = json.Unmarshal(sp1, &desp1)if err != nil {fmt.Printf("err: %v\n", err)}fmt.Printf("desp1: %T %[1]v %[1]q\n", desp1) //[]main.Strcut1 [{aa 3 54} {aa 2 54} {aa 6 54} {aa 3 52} {aa 12 15}] [{"aa" '\x03' '6'} {"aa" '\x02' '6'} {"aa" '\x06' '6'} {"aa" '\x03' '4'} {"aa" '\f' '\x0f'}]
}

任意类型切片

package mainimport ("encoding/json""fmt"
)func main() {//二、任意类型切片序列化与反序列化slis := []any{"sss",[]int{1, 2, 3, 4, 5},666,map[int]int{1: 2, 3: 4},}//整体序列化slisall, err := json.Marshal(slis)if err != nil {fmt.Printf("err: %v \n", err)}fmt.Printf("slisall: %v %[1]T\n", slisall) //slisall: [91 34 115 115 115 34 44 91 49 44 50 44 51 44 52 44 53 93 44 54 54 54 44 123 34 49 34 58 50 44 34 51 34 58 52 125 93] []uint8//整体反序列化var aa []any //slis 定义的类型接收err = json.Unmarshal(slisall, &aa)fmt.Printf("aa: %v %[1]T\n", aa) //aa: [sss [1 2 3 4 5] 666 map[1:2 3:4]] []interface {}//每个子值序列化的集合var sli1 [][]byte //返回的是[]uint8,所以这里接收要写[][]uint8 或[][]uint8for _, v := range slis {s, err := json.Marshal(v)if err != nil {fmt.Printf("err: %v\n", err)}sli1 = append(sli1, s)fmt.Printf("s: %v\n", s)}fmt.Printf("sli1: %T %[1]s %[1]v\n", sli1) //sli1: [][]uint8 ["sss" [1,2,3,4,5] 666 {"1":2,"3":4}] [[34 115 115 115 34] [91 49 44 50 44 51 44 52 44 53 93] [54 54 54] [123 34 49 34 58 50 44 34 51 34 58 52 125]]//每个子值序列化的集合  反序列化var aas []anyfor _, v := range sli1 {var aas1 anyerr := json.Unmarshal(v, &aas1)if err != nil {fmt.Printf("err: %v\n", err)}aas = append(aas, aas1)}fmt.Printf("aas: %T %[1]v\n", aas) //aas: []interface {} [sss [1 2 3 4 5] 666 map[1:2 3:4]]}

相关文章:

golang 标准库json Marshal 序列化与反序列化

标准库代码 func Marshal(v any) ([]byte, error) {e : newEncodeState()defer encodeStatePool.Put(e)err : e.marshal(v, encOpts{escapeHTML: true})if err ! nil {return nil, err}buf : append([]byte(nil), e.Bytes()...)return buf, nil }func Unmarshal(data []byte, …...

【【51单片机AD/DA的分析】】

51单片机AD/DA的分析 看似单片机实验,其实是要学好数电 模数转换 与 数模转换 运算放大器 DA的转换就是利用运算放大器实现的 输出电压v0-(D7~D0)/256 x (VrefxRfb)/R D7~D0 就是我们控制的按键看输入多少 然后再划分256份 Vref是我们设置的一个基准电压 PWM 这种…...

在docker中安装使用达梦数据库

关于在docker中安装达梦数据库,达梦官方网站其实是有提供安装使用方法的,但可能还是有朋友不会,这里将在原文基础上简单扩充下。 注意:docker容器中,数据库安装后没有创建服务的脚本,只有bin、bin2、conf、…...

Leetcode-每日一题【剑指 Offer II 010. 和为 k 的子数组】

题目 给定一个整数数组和一个整数 k &#xff0c;请找到该数组中和为 k 的连续子数组的个数。 示例 1&#xff1a; 输入:nums [1,1,1], k 2输出: 2解释: 此题 [1,1] 与 [1,1] 为两种不同的情况 示例 2&#xff1a; 输入:nums [1,2,3], k 3输出: 2 提示: 1 < nums.leng…...

【JavaScript】使用Promise来处理异步调用,方法传入参数为接口,并回调接口的方法

例如我们在下面这个方法传入一个接口&#xff0c;并将方法的执行过程用传入的接口进行回调 connect() {wx.connectSocket({url: this.url,success: () > {console.log(WebSocket 连接创建成功);},fail: (err) > {console.error(WebSocket 连接创建失败, err);}});wx.onS…...

grid map学习笔记1之Ubuntu18.04+ROS-melodic编译安装grid_map栅格地图及示例运行

文章目录 0 引言1 安装依赖和编译1.1 安装依赖1.2 下载编译 2 运行示例2.1 simple_demo2.2 tutorial_demo2.3 iterators_demo2.4 image_to_gridmap_demo2.5 grid_map_to_image_demo2.6 opencv_demo2.7 resolution_change_demo2.8 filters_demo2.9 interpolation_demo 0 引言 苏…...

postgres wal2json插件jsonb字段数据丢失问题解决

使用pgwal2jsondebezium进行数据同步时&#xff0c;发现偶尔会有jsonb字段数据丢失的问题 进行测试时发现&#xff1a; 1、发生数据丢失的jsonb字段长度都比较大(超过toast阈值&#xff0c;使用toast表存储) 2、针对发生jsonb字段丢失的数据&#xff0c;jsonb字段本身未发生修…...

华为eNSP:路由引入

一、拓扑图 二、路由器的配置 1、配置路由器的IP AR1&#xff1a; [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.1 24 [Huawei-GigabitEthernet0/0/0]qu AR2&#xff1a; [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.2 24 [Huaw…...

Retrospectives on the Embodied AI Workshop(嵌入式人工智能研讨会回顾) 论文阅读

论文信息 题目&#xff1a;Retrospectives on the Embodied AI Workshop 作者&#xff1a;Matt Deitke, Dhruv Batra, Yonatan Bisk 来源&#xff1a;arXiv 论文地址&#xff1a;https://arxiv.org/pdf/2210.06849 Abstract 我们的分析重点关注 CVPR Embodied AI Workshop 上…...

「JVM」Full GC和Minor GC、Major GC

Full GC和Minor GC、Major GC 一、Full GC1、什么是Full GC?2、什么情况下会触发full gc&#xff1f; 二、Minor GC1、什么是Minor GC&#xff1f;2、什么情况下会触发Minor GC&#xff1f; 三、Major GC1、什么是Major GC&#xff1f;2、什么情况下会触发Major GC&#xff1f…...

Asp.Net MVC 使用Log4Net

Asp.Net MVC 使用Log4Net 在 ASP.NET MVC 中使用 Log4net 需要进行一些配置和代码集成。下面是在 ASP.NET MVC 中使用 Log4net 的步骤&#xff1a; 1. 安装 Log4net NuGet 包 打开 NuGet 包管理器控制台&#xff0c;并运行以下命令来安装 Log4net&#xff1a; Install-Pack…...

[元带你学: eMMC协议 29] eMMC 断电通知(PON) | 手机平板电脑断电通知

依JEDEC eMMC及经验辛苦整理,原创保护,禁止转载。 专栏 《元带你学:eMMC协议》 内容摘要 全文 2000 字, 主要内容 前言 断电通知是什么? 断电通知过程...

vue使用recorder-core.js实现录音功能

下载组件 npm install recorder-core封装方法 record.ts //必须引入的核心 import Recorder from recorder-core;//引入mp3格式支持文件&#xff1b;如果需要多个格式支持&#xff0c;把这些格式的编码引擎js文件放到后面统统引入进来即可 import recorder-core/src/engine/…...

ThinkPHP8知识详解:给PHP8和MySQL8添加到环境变量

在PHPenv安装的时候&#xff0c;环境变量默认的PHP版本是7.4的&#xff0c;MySQL的版本是5.7的&#xff0c;要想使用ThinkPHP8来开发&#xff0c;就必须修改环境变量&#xff0c;本文就详细讲解了如果修改PHP和MySQL的环境变量。 1、添加网站 启动phpenv&#xff0c;网站&…...

UE使用UnLua(二)

1.前言 最近也是比较忙&#xff0c;忘了来更新了&#xff0c;好多都是开了头断更的&#xff08;狗头&#xff09;&#xff0c;今天抽空再更一篇&#xff01;&#xff01; 这篇讲一下在UnLua中覆盖蓝图事件&#xff08;函数&#xff09;&#xff0c;及按钮、文本控件的一些使用…...

Appium+python自动化(二十五)-获取控件ID(超详解)

简介 在前边的第二十二篇文章里&#xff0c;已经分享了通过获取控件的坐标点来获取点击事件的所需要的点击位置&#xff0c;那么还有没有其他方法来获取控件点击事件所需要的点击位置呢&#xff1f;答案是&#xff1a;Yes&#xff01;因为在不同的大小屏幕的手机上获取控件的坐…...

SDWAN组网的九大应用场景

SD-WAN&#xff08;软件定义广域网&#xff09;是一种新兴的网络技术&#xff0c;它可以优化和管理企业广域网&#xff08;WAN&#xff09;的数据传输&#xff0c;提供更加高效、灵活和安全的网络连接。SD-WAN的出现极大地改变了传统WAN的组网方式&#xff0c;为企业提供了更多…...

el-date-picker时间范围只能选五分钟之内

el-date-picker时间范围只能选五分钟之内 一、主要代码 一、主要代码 <el-date-pickertype"datetime"size"small"value-format"yyyy-MM-dd HH:mm:ss"v-model"searchData.submitTimeCode":editable"false"placeholder&qu…...

大数据分析案例-基于LightGBM算法构建乳腺癌分类预测模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…...

Java中的io流

File文件类 1.访问文件名相关的方法 String getName():返回此File对象所表示的文件名或路径名&#xff08;如果是路径&#xff0c;则返回最后一级子路径名)。 String getPath():返回此File对象所对应的路径名。File getAbsoluteFile():返回此 File对象的绝对路径。 String getA…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...