go使用gjson操作json数据

gjson使用

gjson介绍

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

安装gjson库

bash 复制代码
go get -u github.com/tidwall/gjson

解析 JSON 字符串

go 复制代码
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 数据的理想选择,特别是当处理的数据结构未知或动态时。

相关推荐
struggle20254 小时前
AxonHub 开源程序是一个现代 AI 网关系统,提供统一的 OpenAI、Anthropic 和 AI SDK 兼容 API
css·人工智能·typescript·go·shell·powershell
Mgx6 小时前
高性能 Go 语言带 TTL 的内存缓存实现:精确过期、自动刷新、并发安全
go
考虑考虑7 小时前
go格式化时间
后端·go
光头闪亮亮1 天前
ZBar 条码/二维码识别工具介绍及golang通过cmd调用ZBar从图片中批量识别二维码
go
东风t西瓜1 天前
golang项目开发环境配置
go
zhuyasen2 天前
在某些 Windows 版本,Go 1.25.x 编译出来的 exe 运行报错:此应用无法在你的电脑上运行
windows·go·编译器
用户89535603282202 天前
深入浅出 Go slices 包:类型安全、内存安全与高性能实践
go
王中阳Go2 天前
Python 的 PyPy 能追上 Go 的性能吗?
后端·python·go
gopyer3 天前
180课时吃透Go语言游戏后端开发11:Go语言中的并发编程
golang·go·游戏开发·并发编程
Java陈序员3 天前
简单好用!一款针对 IT 团队开发的文档管理系统!
mysql·docker·go