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

go使用gjson操作json数据

gjson使用

  • gjson介绍
  • 安装gjson库
  • 解析 JSON 字符串
  • 路径语法
  • 复杂查询
  • 遍历和修改
  • 结论

gjson介绍

gjson 是一个 Go 语言库,用于快速解析 JSON 数据。它提供了非常简洁的 API 来查询 JSON 数据,无需预先定义 Go 结构体或映射(map)来匹配 JSON 结构。这使得 gjson 成为处理动态或未知结构的 JSON 数据的理想选择。

安装gjson库

go get -u github.com/tidwall/gjson

解析 JSON 字符串

package main  import (  "fmt"  "github.com/tidwall/gjson"  
)  func main() {  jsonString := `{"name":"Jason", "age":34, "city":"南京", "address":"紫东创意园"}`  // 获取 "name" 字段的值  name := gjson.Get(jsonString, "name").String()  fmt.Println("Name:", name)  // 获取 "age" 字段的值  age := gjson.Get(jsonString, "age").Int()  fmt.Println("Age:", age)// 获取 "address" 字段的值  address := gjson.Get(jsonString, "address").String()  fmt.Println("Address:", address)  // 尝试获取不存在的字段,并处理结果  nonExist := gjson.Get(jsonString, "non_exist").String()  if nonExist == "" {  fmt.Println("Non-exist field is empty or not found.")  }  // 处理数组jsonArray := `{"fruits":["apple","banana","cherry"]}`  firstFruit := gjson.Get(jsonArray, "fruits.0").String()  fmt.Println("First Fruit:", firstFruit)  
}

路径语法

gjson 使用类似 XPath 的语法来查询 JSON 数据。一些基本的路径示例包括:
.name:访问顶层对象的 name 字段。
.store.book[0].title:访问 store 对象中 book 数组的第一个元素的 title 字段。
#.name:在 JSON 对象的任何层级中搜索 name 字段的第一个匹配项(使用 # 表示递归搜索)。

复杂查询

gjson 还支持更复杂的查询,如使用 | 操作符进行多路径查询,或使用 @this 引用当前节点等。

遍历和修改

需要注意的是,gjson 主要用于查询和解析 JSON 数据,而不是用于修改 JSON 数据。如果你需要修改 JSON 数据,你可能需要将 gjson 解析的结果转换为 Go 的结构体或映射(map),进行修改后再转换回 JSON 字符串。

结论

gjson 是一个强大且灵活的库,用于在 Go 程序中快速解析和查询 JSON 数据。它的简洁 API 和高效的性能使其成为处理 JSON 数据的理想选择,特别是当处理的数据结构未知或动态时。

http://www.lryc.cn/news/405797.html

相关文章:

  • Mac 下华为鸿蒙 :DevEco Studio 开发工具下载
  • C进阶—动态内存管理
  • QT表格显示MYSQL数据库源码分析(七)
  • excel系列(三) - 利用 easyexcel 快速实现 excel 文件导入导出
  • 探索前后端数据传输模式:Java、Go与Python的实践20240719
  • 【YashanDB知识库】yac修改参数后关闭数据库hang住
  • 提升网站性能:ThinkPHP6中如何实现Mysql分页查询
  • Python:Flask自定义URL路由参数过滤器
  • 闭包与装饰器
  • DNS服务器的搭建
  • 【JavaScript】点击穿透
  • [Linux]Mysql之主从同步
  • DAY21-二叉树
  • java面试-场景题
  • 【TORCH】matplotlib绘制一条横线的两种方法
  • 深入浅出mediasoup—WebRtcTransport
  • 如何让局域网中的其他电脑访问VMWare虚拟机上的Windows虚拟系统
  • 旧电脑回收前怎么清除数据
  • python——TinyDB
  • 【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第三十八章 驱动模块编译进内核
  • Mailspring搭建安装教程:打造个性邮件体验
  • 【分布式锁】Redission实现分布式锁
  • UE4/5 对话系统
  • Golang | Leetcode Golang题解之第275题H指数II
  • Python—面向过程编程,详细讲解(类和实例,初始化函数,类中封装数据与操作)
  • Linux云计算 |【第一阶段】SERVICES-DAY2
  • el-upload照片墙自定义上传多张图片(手动一次性上传多张图片)包含图片回显,删除
  • 三星Unpacked发布会即将举行:有新款折叠屏手机,还有智能戒指
  • 【Python】Matplotlib简要教程
  • 数驭未来,景联文科技构建高质大模型数据库