上一篇golang读取json配置文件介绍了使用encoding/json包来解析json文件,但是这种方法在面对结构复杂、字段较多的情况时,解析效率不是很高。上一篇中,我们在解析json文件时,需要提前在代码中定义好解析后对应的结构体,比较麻烦。而今天的主角jsonparser不需要你了解载入文件的结构,允许你通过提供它们的路径来访问。它可以快速的提取json内容,比encoding/json包的速度高出10倍左右。
jsonparser之所以有如此快的速度,原因有如下几个方面:

  • 它不依赖encoding/json,reflection或者interface{},唯一依赖包是bytes;
  • 在字节级别上操作json,提供指向原始数据结构的指针,无内存分配;
  • 没有自动类型转化,默认情况下,所有内容都是字节切片,但是它提供了值类型,因此你可以自己进行转化
  • 它不解析完整的内容,仅仅解析你指定的字段

通过下面的代码来了解下它的使用。

package mainimport ("github.com/buger/jsonparser""fmt"
)func main() {data := []byte(`{"person": {"name":{"first": "Leonid","last": "Bugaev","fullName": "Leonid Bugaev"},"github": {"handle": "buger","followers": 109},"avatars": [{ "url": "https://avatars1.githubusercontent.com/u/14009?v=3&s=460", "type": "thumbnail" }]},"company": {"name": "Acme"}
}`)result, err := jsonparser.GetString(data, "person", "name", "fullName")if err != nil {fmt.Println(err)}fmt.Println(result)content, valueType, offset, err := jsonparser.Get(data, "person", "name", "fullName")if err != nil {fmt.Println(err)}fmt.Println(content, valueType, offset) //jsonparser提供了解析bool、string、float64以及int64类型的方法,至于其他类型,我们可以通过valueType类型来自己进行转化result1, err := jsonparser.ParseString(content)if err != nil {fmt.Println(err)}fmt.Println(result1)err = jsonparser.ObjectEach(data, func(key []byte, value []byte, dataType jsonparser.ValueType, offset int) error {fmt.Printf("key:%s\n value:%s\n Type:%s\n", string(key), string(value), dataType)return nil}, "person", "name")
}

参考文章

  1. buger/jsonparser

解析json文件的Go依赖包相关推荐

  1. 如何使用java解析json文件并将其写入数据库

    JAVA解析JSON数据文件 在使用第三方的api文档时,会得到相应的JSON数据文件,那么我们怎样将JSON文件写入数据库从而测试数据呢?下面我将给大家做一个简单的展示. 一.什么是JSON JSO ...

  2. 从 vue-cli 源码中,我发现了27行读取 json 文件有趣的 npm 包

    1. 前言 大家好,我是若川.最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.已进行四个月了,很多小伙伴表示收获颇丰. 想学源码 ...

  3. python 批量下载依赖_python通过txt文件批量安装依赖包的实现步骤

    python通过txt文件批量安装依赖包的实现步骤 如果要用某个开源框架,需要安装多个依赖包可以如下操作: 如依赖文件形式如下(可以不要版本号): txt文件名为requirements.txt,内容 ...

  4. settings.gradle.kts里读取properties配置文件或者解析json文件

    settings.gradle.kts里进行配置读取可进行动态控制 include 再结合 plugin+includeBuild方式可实现远程依赖和本地module的动态切换 读取配置test.pr ...

  5. Java性能优化:正确的解析JSON文件

    为什么80%的码农都做不了架构师?>>>    数据收集服务平均1小时OOM(java.lang.OutOfMemoryError: GC overhead limit exceed ...

  6. python解析json_python解析json文件

    概念 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON.XML等.反序列化就是从存储区域(JSON,XML)读取反序列化对象的状态 ...

  7. 如何使用PHP解析JSON文件? [重复]

    本文翻译自:How can I parse a JSON file with PHP? [duplicate] This question already has an answer here: 这个 ...

  8. 使用C/C++解析json文件

    目录 为什么? 怎么做? 为什么? 举个例子,我们在使用C/C++进行深度学习模型的测试,由于测试过程中可能有许多参数要传给model,比如在进行目标检测时,要传入nms阈值等.我们要最优化测试结果, ...

  9. java解析json文件_Java性能优化:正确的解析JSON文件

    数据收集服务平均1小时OOM(java.lang.OutOfMemoryError: GC overhead limit exceeded)一次,发现都是在下载处理 JSON Atom Feed时OO ...

最新文章

  1. 再见,Windows 7!盘点 2020 影响开发者的十大事件!
  2. 从存储区提供程序的数据读取器中进行读取时出错_三菱伺服控制程序写法破析...
  3. android抽屉实现不同之处
  4. linux history命令显示时间_每天一条Linux命令(29) more (分页显示内容)
  5. 如何开启OpenSSL和mcrypt
  6. 行为设计模式 - 状态设计模式
  7. 【蓝桥杯嵌入式】【STM32】9_PWM之实现交替呼吸灯
  8. 人工智能技术在银行客服中心的应用风险
  9. linux usermod修改用户所在组方法
  10. linux 下ip命令对比ifconfig命令
  11. Tomcat Insufficient space for shared memory file
  12. 华军java_Java SE Runtime Environment 8
  13. Android--数据存储
  14. 最实用的自媒体爆文采集工具,简单易出爆文
  15. ADS2022学习笔记(二)
  16. Mysql 分片,大数据量时扩容方案
  17. 查找/分析Windows蓝屏DMP文件
  18. android车载应用市场,车载市场
  19. 第三方登录之Github登录篇
  20. 21级pta《查找表》

热门文章

  1. “破壳”(Shellshock)漏洞修复
  2. 精密制造业行业_机械行业:精密制造业深度报告-11101.ppt
  3. 【学习笔记】互联网金融:芝麻信用分的建模过程
  4. 英语阅读——2004
  5. 利用双目相机数机数据进行实时动态障碍物检测和跟踪
  6. RISC-V的软件开发
  7. 自研自制解决行业痛点——得力集团细分领域创业
  8. 2022年报名PMI-ACP考试,只需满足两个条件
  9. VoWiFi:重新定义WiFi价值
  10. 当我们谈论光波导时,我们在谈论什么(上)