Go语言中的JSON库简介

Go 标准库中的 encoding/json 包提供了 JSON 数据的编码和解码功能。

在日常开发中,我们主要使用的函数有解析字符串类型的 MarshalUnmarshal,以及处理流式 JSON 数据的 EncoderDecoder

一、Marshal 与 Unmarshal

  • json.Marshal:转为 JSON 字符串
  • json.Unmarshal:转为 Go 数据结构
func Marshal(v interface{}) ([]byte, error)

函数接受一个参数 v,它可以是任意类型的数据结构,包括基本类型、结构体、切片、映射等,Marshal() 函数会将这个数据结构转换为对应的 JSON 格式的字节切片,并返回结果。实例:

type Person struct {Name stringAge  int
}func main() {// Marshalp := &Person{Name: "Alice", Age: 30}bytes, err := json.Marshal(p)if err != nil {fmt.Println("Error:", err)}fmt.Println(string(bytes))	// 字节 强转 字符串// Unmarshalvar p2 Personerr = json.Unmarshal(bytes, &p2)if err != nil {fmt.Println("Error:", err)}fmt.Println(p2)
}

二、Encoder 与 Decoder

Encoder 可以将Go语言的数据结构编码为 JSON 并写入到一个io.Writer接口,这对于处理大的、可能无法全部装入内存的数据结构或者连续的数据流非常有用。即Encoder可以将数据直接写入到一个文件中,而不需要先将整个数据集序列化为一个大的字符串。

Decoder 可以从一个 io.Reader 接口读取 JSON 数据并解码为 Go 语言的数据结构,这对于读取大的、可能无法全部装入内存的JSON文档或者连续的数据流非常有用。即Decoder可以从一个文件中读取并解码数据,而不需要先将整个文件加载到内存中。

  • json.NewEncoder:创建流式 JSON 编码器
  • json.NewDecoder:创建流式 JSON 解码器
type Person struct {Name string
}func main() {// Encoderp := &Person{Name: "Alice"}encoder := json.NewEncoder(os.Stdout)err := encoder.Encode(p)if err != nil { fmt.Println("Error:", err) }// Decodervar p2 Persondecoder := json.NewDecoder(strings.NewReader(`{"Name":"Alice"}`))err = decoder.Decode(&p2)if err != nil { fmt.Println("Error:", err) }fmt.Println(p2)
}// 输出:{"Name":"Alice"}  {Alice}

附加:Encoder 与 Decoder 简单应用案例

// Encoder
file, _ := os.Create("output.json")
enc := json.NewEncoder(file)
for _, v := range values {err := enc.Encode(v)if err != nil {log.Println(err)}
}
// Decoder
file, _ := os.Open("input.json")
dec := json.NewDecoder(file)
for {var v Valueif err := dec.Decode(&v); err == io.EOF {break} else if err != nil {log.Println(err)}fmt.Println(v)
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Python系列] 定时任务调度

起因 在计算机网络中,我们经常定期发送数据包、定期更新网络状态等;在操作系统中,也需要定时定期备份数据、定期清理缓存等;在应用程序中,我们也很需要定期更新数据、定期发送通知等。所以,到底怎么样才能有…

计讯物联网关型水利遥测终端机TY910确保闸站自动化监测长效运行

闸站是我国水利建设工程的重要组成部分,具备调度水源、防洪排涝、灌溉等能力,在农业、水路运输、养殖业等行业领域起着关键作用,进而解决区域水资源不均衡的问题,促进水资源多方面的利用。当前,我国闸站存在数量多、分…

线性代数 4 every one(线性代数学习资源分享)

Linear Algebra 4 Every One 版权说明,以下我分享的都是一个名叫Kenji Hiranabe的日本学者,在github上分享的,关于Gilbert Strang教授所撰写的《Linear Algebra for Everyone》一书的总结,更像是一个非常精美的线性代数手册&#…

ffmpeg命令行log的使用参数使用

1、使用report参数将log保存在文件中,但是这个命令参数需要和环境变量FFREPORT配合使用。 FFREPORTfilelog.txt:level100 ffmpeg -report -codec:v h264 -i .\zzsin_1280x720_30fps_60f.mp4 -frames:v 1 test.yuv该命令就可以将ffmpeg的log保存在文件log.txt中 …

.net core 2.1 简单部署IIS运行

netcore的项目不像netFramework那么方便部署到iis还是要费点功夫的 比如我想把这个netcore2.1的项目部署到iis并运行: 按照步骤走: 一、确认自己的netcore环境 1、需要安装下面3个环境包(如果电脑已安装请忽略) 检查是否安装cmd命令:cmd&…

《银行法律法规》三、银行管理——2、商业银行资产负债管理

第三章 商业银行资产负债管理 第一节 资产负债管理概述 考点1 资产负债管理的对象★★ 对于商业银行而言, 传统资产负债管理的对象即是银行的资产负债表。 传统资产负债管理的内涵是:根据外部形势变化及发展战略要求, 以资本约束为核心&#xff0c…

go mod vendor简明介绍

Go 语言在 go 1.6 版本以后编译 go 代码会优先从 vendor 目录先寻找依赖包,它具有以下优点: 复制依赖:go mod vendor 会把程序所依赖的所有包复制到项目目录下的vendor 文件夹中,所以即使这些依赖包在外部源(如 GitHu…

OpenCV中掩膜(Mask)、setTo()、copyTo()、clone()、inRange()的定义与使用

文章目录 1、掩膜(Mask)是什么(1)从物理的角度来看:(2)图像处理中的掩膜Mask(3)掩膜的用法:(4)掩膜Mask 的运算: 2、setTo()函数:将图…

flutter开发实战-dio文件下载实现

flutter开发实战-dio文件下载实现 在开发中,需要下载文件,这里使用的是dio dio 是一个强大的 Dart HTTP 请求库,支持全局配置、Restful API、FormData、拦截器、 请求取消、Cookie 管理、文件上传/下载、超时以及自定义适配器等。 一、引入d…

QGraphicsDropShadowEffect的介绍

QGraphicsDropShadowEffect的介绍 QGraphicsDropShadowEffect是Qt中一个用于添加阴影效果的图形特效类,可以在图形或控件周围添加一层阴影效果。通过调整阴影的偏移、模糊度、颜色等参数,可以实现各种独特的视觉效果。 基本用法 添加阴影 首先&#…

JS脚本 - 批量给所有指定标签追加Class属性

JS脚本 - 批量给所有指定标签追加Class属性 前言一. 脚本二. 测试运行 前言 公司里我们有个应用引入了UBT埋点,记录了页面上所有的点击操作以及对应的点击按钮。但是我们看下来发现,我们需要给每个按钮加一个唯一标识做区分,并且这个ID是给U…

自动驾驶遥控泊车RPA系统功能规范

目 录 1. 版本履历... 4 2. 文档使用范围... 4 3. 术语缩写... 4 4. 系统概述... 5 4.1 系统功能说明... 5 4.2 泊车状态说明... 6 5. 产品基本参数... 6 5.1控制器基本参数... 6 5.2全景摄像头基本参数... 7 5.3 超声波传感器基本参数... 7 …

Flask 使用Flask的session来保存用户登录状态例子

使用Python的Flask库实现的登录接口、查询金额接口和注销接口的示例。 当用户发送POST请求到/login接口时,代码会获取请求中的用户名和密码。如果用户名和密码匹配(在示例中是admin和admin123),则会将用户名保存在session中&…

docker命令

查看运行的容器:Docker ps 查看镜像:Docker images 停止容器运行:Docker stop 容器id 删除容器:docker rm 容器id 删除镜像:docker rmi 镜像id 镜像保存下来:docker save -o filename.tar 镜像仓库名称…

php判断是ios手机还是安卓手机

可以使用PHP中的$_SERVER[HTTP_USER_AGENT]全局变量来判断用户的设备类型。根据不同的设备类型&#xff0c;可以判断是iOS手机还是安卓手机。 下面是一个示例代码&#xff1a; <?phpfunction getUserAgent(){$user_agent $_SERVER[HTTP_USER_AGENT]; // 判断是否为iOS设备…

吴恩达机器学习2022-Jupyter特征缩放

1可选实验室: 特征缩放和学习率(多变量) 1.1 目标 在这个实验室里: 利用前一实验室开发的多变量线性回归模型程序在具有多种功能的数据集上运行梯度下降法探讨学习速度 alpha 对梯度下降法的影响通过使用 z 分数标准化的特征缩放来提高梯度下降法的性能 1.2 工具 您将使用…

Python爬虫学习笔记(三)————urllib

目录 1.使用urllib来获取百度首页的源码 2.下载网页图片视频 3.总结-1 4.请求对象的定制&#xff08;解决第一种反爬&#xff09; 5.编解码 &#xff08;1&#xff09;get请求方式&#xff1a;urllib.parse.quote&#xff08;&#xff09; &#xff08;2&#xff09;get请求…

RPC分布式网络通信框架(三)—— 服务配置中心Zookeeper模块

文章目录 一、使用Zookeeper的意义二、Zookeeper基础1 文件系统2 通知机制3 原生zkclient API存在的问题4 服务配置中心Zookeeper模块 三、Zk类实现Start方法创建节点、get节点值方法 四、框架应用rpc提供端框架rpc调用端&#xff08;客户端&#xff09;框架 总结 一、使用Zook…

flutter开发实战-生日等日期选择器DatePicker

flutter开发实战-生日等日期选择器DatePicker 在开发遇到设置生日等信息需要选择日期&#xff0c;这里用到的是CupertinoDatePicker iOS效果的日期、时间选择器 一、效果图 运行后效果图如下 二、代码实现 我们需要调用底部弹窗显示 //显示底部弹窗static void bottomShe…

kubernetes安全机制

//机制说明 Kubernetes 作为一个分布式集群的管理工具&#xff0c;保证集群的安全性是其一个重要的任务。API Server 是集群内部各个组件通信的中介&#xff0c; 也是外部控制的入口。所以 Kubernetes 的安全机制基本就是围绕保护 API Server 来设计的。 比如 kubectl 如果想向…