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