Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Go学习_28_使用easyjson高效解析json数据

Go学习_28_使用easyjson高效解析json数据

作者头像
码农帮派
发布于 2020-04-26 14:24:58
发布于 2020-04-26 14:24:58
4.4K00
代码可运行
举报
文章被收录于专栏:码农帮派码农帮派
运行总次数:0
代码可运行

Golang中自带的json包可以用来解析json数据,但是Golang自带的json解析是通过反射机制实现json数据的解析的,这样就造成了解析性能的底下,json包在解析本地配置文件的场景下使用的较多,但在一些高并发的场景下json就显得不足。

对于json的解析,我们可以使用easyjson包,避免使用反射,从而提高解析的性能,在众多Golang高性能解析json的框架中,easyjson名列前茅。使用easyjson首先需要安装easyjson:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
go get -u github.com/mailru/easyjson/...

easyjson更多的资料在:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://github.com/mailru/easyjson

easyjson在解析json数据的时候,并不是使用反射机制,而只针对预先定义好的json结构体对输入的json字符串进行纯字符串的截取,并将对应的json字段赋值给结构体。easyjson提供提供了代码生成工具,可以一键生成go文件中定义的结构体对应的解析代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
easyjson -all ./json_data.go

上面的命令会将json_data.go中定义的所有Struct生成对应的json解析规则。

【注意】easyjson在解析json数据的时候虽然并不会使用反射机制,但是在使用easyjson生成解析代码的时候,easyjson还是会使用反射机制的,所以我们需要为每个解析字段指定FieldTag,否则easyjson就会将变量名当作解析字段生成解析代码,当然解析代码生成之后,easyjson解析json数据就和反射机制没有关系了。

生成的easyjson解析代码:

使用easyjson解析json数据:

代码运行结果:

之后我们使用Benchmark对Golang内置的json包以及eashjson包,解析相同的json数据并对解析好的Struct进行json转换,测试一下两者的性能:

编写json_test.go文件(Benchemark测试需要测试文件以_test结尾):

运行Benchmark命令,测试代码性能:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
go test -bench=. -benchmem

测试结果:

从上面的测试结果可以看到,easyjson在测试中运行的时间大约是json包的三分之一,easyjson在单次运行占用内存和内存分配次数上也要比Golang内置的json包表现要好很多。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农帮派 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
golang源码分析:easyjson(1)
https://github.com/mailru/easyjson另辟蹊径,它采用代码生成的方式,为每一个结构体生成对应的json序列化和反序列化方法,类似proto buf,由于是在编译时的代码生成,避免了运行时的内存分配和反射,所以效率比官方的json库快4到5倍。但是它丧失了灵活性,不支持未知类型的json的序列化和反序列化。下面我们来分析下它的源码。
golangLeetcode
2023/09/06
3780
golang源码分析:easyjson(1)
Golang 语言中怎么提升 JSON 编解码的性能?
在 Golang 语言中,我们一般会使用标准库 encoding/json 序列化/反序列化 JSON,但是因为 encoding/json 需要使用反射,所以如果在性能要求比较高的场景中,它就不太合适了。
frank.
2021/08/13
1.8K0
Golang 语言中怎么提升 JSON 编解码的性能?
easyjson 源码调试学习
json解析逻辑一直很繁琐,是go项目可能遇到的性能瓶颈之一。easyjson的解决思路很直观,代码量也不大,整体思路是根据源码中的结构体生成定制化的marshal和unmarshal方法,由于是定制化的,解析的时候没有反射,性能可以做到很好,下面通过调试学习了一下定制化的marshal和unmarshal方法是如何生成的。
golangLeetcode
2022/08/02
4820
easyjson 源码调试学习
使用easyjson提高序列化传输的效率
easyjson 是用来快速进行json序列化与反序列化的工具包,通过给我们要进行序列化的struct生成方法来实现不通过反射进行json序列化,比golang原有json工具包,性能能够提高2~3倍。
Johns
2021/03/22
2.1K0
使用easyjson提高序列化传输的效率
基于 JIT 技术的开源全场景高性能 JSON 库
大家好,我是Mandy,上一节我们对Go中的切片数据类型进行了深度的剖析,今天给大家分享一个字节跳动自研开源的JSON数据解析包。一个速度奇快的 JSON 序列化/反序列化库,由 JIT (即时编译)和 SIMD (单指令流多数据流)加速。
兔云小新LM
2023/08/09
7040
基于 JIT 技术的开源全场景高性能 JSON 库
golang源码分析:easyjson(2)
github.com/mailru/easyjson@v0.7.7/easyjson/main.go
golangLeetcode
2023/09/06
2260
golang源码分析:easyjson(2)
用golang写的golang解析json数据的包
gojson是快速解析json数据的一个golang包,你使用它可以快速的查找json内的数据 安装 go get github.com/widuu/gojson 使用简介 结构 type Js struct { data interface{}} (1) func Json(data) *Js data为string类型,初始化Js结构,解析json并且return Js.data json := `{"from":"en","to":"zh"}`c1 := gojson.Json(json)
李海彬
2018/03/22
1.7K0
QT软件开发: 解析JSON数据(QJsonX)
本篇文章介绍使用QJsonDocument、QJsonObject、QJsonArray来解析JSON数据。
DS小龙哥
2022/01/12
1K0
Python解析JSON数据教程
JSON格式是网站和API使用的通用标准格式,现在主流的一些数据库(如PostgreSQL)都支持JSON格式。在本文中,我们将介绍如何使用Python处理JSON数据。首先,让我们先来看看JSON的定义。
用户7850017
2021/10/29
4.5K0
Python解析JSON数据教程
【Json-Rpc #1】项目背景及环境搭建
🔥 RPC(Remote Procedure Call)远程过程调用,是一种通过网络从远程计算机上请求服务,而不需要了解底层网络通信细节。
IsLand1314
2025/03/19
1240
【Json-Rpc #1】项目背景及环境搭建
Go怎么解析不定JSON数据?
在开发中常常会碰到很多JSON类型的数据进行交互,而其中有很多JSON数据你是不能确定它的字段和结构的,而Go语言是一门静态强类型的语言,在进行JSON解析的时候必须要确定字段的类型,定义出对应的结构体,然后再进行Unmarshal,那这二者之间的冲突我们该如何解决呢?
程序猿川子
2024/07/01
1810
Go怎么解析不定JSON数据?
Java中使用fastjson解析json数据方法
 上一篇文章当中,写了关于Java中使用fastjson创建json数据方法,这篇文章写写java中使用fastjson解析json数据的方法。 首先,老样子,还是需要先导入fastjson的jar包,这个jar包可以从百度上搜索然后下载,下载后导入就可以正常使用了。(导包的时候注意要使用alibaba为名的)
吃猫的鱼Code
2023/02/02
1.1K0
Go 高性能json库比较
在大房间场景下,房间成员列表接口要返回该房间全部成员,要序列化的struct很大(最后返回的序列化后的response大小有1M以上),不以性能见长的官方json库非常吃力。
fliter
2023/06/18
4K0
Go 高性能json库比较
Go 语言原生的 json 包有什么问题?如何更好地处理 JSON 数据?
Go 的 “玩家” 们看到这个题目可能会很疑惑——对于 JSON 而言,Go 原生库 encoding/json 已经是提供了足够舒适的 JSON 处理工具,广受 Go 开发者的好评。它还能有什么问题?但是,实际上在业务开发过程中,我们遇到了不少原生 json 做不好甚至是做不到的问题,还真是不能完全满足我们的要求。
amc
2021/05/06
5.3K0
Go 语言原生的 json 包有什么问题?如何更好地处理 JSON 数据?
【Golang】json使用
在web开发中,json好像是一个绕不开的一个模块,今天我们来讲一下golang的json标准库.
会呼吸的Coder
2020/02/17
1K0
【说站】php解析json数据
PHP具有内置函数解码JSON数据,这个功能是json_decode()函数。注:这个函数只适用于UTF-8代码的字符串数据。
很酷的站长
2022/11/23
1.3K0
【说站】php解析json数据
Go语言JSON 处理
struct能被转换的字段都是首字母大写的字段,但如果想要在json中使用小写字母开头的key,可以使用struct的tag来辅助反射。
王小明_HIT
2021/10/11
8940
前端js解析json数据方法。
前端js解析json数据的方法 本文以一段示例代码来讲解js解析json数据的方法。 // 1.定义json var json1 = {name: "fish1", age: 22, isFlag: true}; alert(json1.name); alert(json1.age); alert(json1.isFlag); // 2.定义json数组 var jsonArr = {code:
吃猫的鱼Code
2023/02/02
5.6K0
Python数据采集:抓取和解析JSON数据
大家好!今天我要和大家分享的是Python数据采集中的一种重要技巧——抓取和解析JSON数据。在互联网时代,JSON成为了数据交换的常用格式,使用Python来采集和解析JSON数据是非常常见的任务,同时也是一项非常实用的技能。
华科云商小彭
2023/09/27
4660
Python数据采集:抓取和解析JSON数据
golang学习笔记——json数据
Name string `json:"name"` //指定json中显示的名称,使用"-"表示不输出
码缘
2021/03/04
3850
相关推荐
golang源码分析:easyjson(1)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验