当前位置: 首页 > 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 数据的理想选择,特别是当处理的数据结构未知或动态时。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C++与lua联合编程
  • Inconsistent Query Results Based on Output Fields Selection in Milvus Dashboard
  • leetcode 106. 从中序与后序遍历序列构造二叉树
  • 深入分析 Android ContentProvider (三)
  • windows11 ,ubuntu20.04双系统,ubuntu没有wifi的解决方式
  • LeetCode-day20-2850. 将石头分散到网格图的最少移动次数
  • MongoDB - 数组更新操作符:$、$[]、$pop、$pull、$push、$each、$sort、$slice、$position
  • C# 时间、空间复杂度
  • STM32自己从零开始实操10:PCB全过程
  • rce漏洞-ctfshow(50-70)
  • 如何开启或者关闭 Windows 安全登录?
  • Python爬虫(基本流程)
  • 【机器学习】机器学习的基本知识点(包括背景、定义、具体内容、功能、使用场景、操作、未来发展和常见算法)
  • WebKit与PWA:打造无缝的渐进式Web应用体验
  • Android14之调试广播实例(二百二十五)
  • AngularJS指令开发(1)——参数详解
  • httpie使用详解
  • If…else
  • k8s 面向应用开发者的基础命令
  • LeetCode18.四数之和 JavaScript
  • Meteor的表单提交:Form
  • Mysql数据库的条件查询语句
  • overflow: hidden IE7无效
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • SpringCloud集成分布式事务LCN (一)
  • vue的全局变量和全局拦截请求器
  • 基于webpack 的 vue 多页架构
  • 技术:超级实用的电脑小技巧
  • 解析 Webpack中import、require、按需加载的执行过程
  • 排序算法之--选择排序
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 网络应用优化——时延与带宽
  • 一份游戏开发学习路线
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 再谈express与koa的对比
  • 自制字幕遮挡器
  • Semaphore
  • 选择阿里云数据库HBase版十大理由
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​Linux·i2c驱动架构​
  • # 数仓建模:如何构建主题宽表模型?
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (AngularJS)Angular 控制器之间通信初探
  • (day 12)JavaScript学习笔记(数组3)
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (Oracle)SQL优化技巧(一):分页查询
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (三)elasticsearch 源码之启动流程分析
  • (十六)视图变换 正交投影 透视投影