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 ,请找到该数组中和为 k 的连续子数组的个数。 示例 1: 输入:nums [1,1,1], k 2输出: 2解释: 此题 [1,1] 与 [1,1] 为两种不同的情况 示例 2: 输入:nums [1,2,3], k 3输出: 2 提示: 1 < nums.leng…...
【JavaScript】使用Promise来处理异步调用,方法传入参数为接口,并回调接口的方法
例如我们在下面这个方法传入一个接口,并将方法的执行过程用传入的接口进行回调 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进行数据同步时,发现偶尔会有jsonb字段数据丢失的问题 进行测试时发现: 1、发生数据丢失的jsonb字段长度都比较大(超过toast阈值,使用toast表存储) 2、针对发生jsonb字段丢失的数据,jsonb字段本身未发生修…...
华为eNSP:路由引入
一、拓扑图 二、路由器的配置 1、配置路由器的IP AR1: [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.1 24 [Huawei-GigabitEthernet0/0/0]qu AR2: [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.2 24 [Huaw…...
Retrospectives on the Embodied AI Workshop(嵌入式人工智能研讨会回顾) 论文阅读
论文信息 题目:Retrospectives on the Embodied AI Workshop 作者:Matt Deitke, Dhruv Batra, Yonatan Bisk 来源:arXiv 论文地址: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? 二、Minor GC1、什么是Minor GC?2、什么情况下会触发Minor GC? 三、Major GC1、什么是Major GC?2、什么情况下会触发Major GC?…...
Asp.Net MVC 使用Log4Net
Asp.Net MVC 使用Log4Net 在 ASP.NET MVC 中使用 Log4net 需要进行一些配置和代码集成。下面是在 ASP.NET MVC 中使用 Log4net 的步骤: 1. 安装 Log4net NuGet 包 打开 NuGet 包管理器控制台,并运行以下命令来安装 Log4net: 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格式支持文件;如果需要多个格式支持,把这些格式的编码引擎js文件放到后面统统引入进来即可 import recorder-core/src/engine/…...
ThinkPHP8知识详解:给PHP8和MySQL8添加到环境变量
在PHPenv安装的时候,环境变量默认的PHP版本是7.4的,MySQL的版本是5.7的,要想使用ThinkPHP8来开发,就必须修改环境变量,本文就详细讲解了如果修改PHP和MySQL的环境变量。 1、添加网站 启动phpenv,网站&…...
UE使用UnLua(二)
1.前言 最近也是比较忙,忘了来更新了,好多都是开了头断更的(狗头),今天抽空再更一篇!! 这篇讲一下在UnLua中覆盖蓝图事件(函数),及按钮、文本控件的一些使用…...
Appium+python自动化(二十五)-获取控件ID(超详解)
简介 在前边的第二十二篇文章里,已经分享了通过获取控件的坐标点来获取点击事件的所需要的点击位置,那么还有没有其他方法来获取控件点击事件所需要的点击位置呢?答案是:Yes!因为在不同的大小屏幕的手机上获取控件的坐…...
SDWAN组网的九大应用场景
SD-WAN(软件定义广域网)是一种新兴的网络技术,它可以优化和管理企业广域网(WAN)的数据传输,提供更加高效、灵活和安全的网络连接。SD-WAN的出现极大地改变了传统WAN的组网方式,为企业提供了更多…...
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算法构建乳腺癌分类预测模型
🤵♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...
Java中的io流
File文件类 1.访问文件名相关的方法 String getName():返回此File对象所表示的文件名或路径名(如果是路径,则返回最后一级子路径名)。 String getPath():返回此File对象所对应的路径名。File getAbsoluteFile():返回此 File对象的绝对路径。 String getA…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
