Go 语言 gjson对Json数据进行操作

本文详细介绍了如何使用Go语言的gjson库来操作JSON数据,包括获取值、路径语法、结果类型、修饰符和路径链等功能。通过示例展示了如何解析、查询、遍历JSON对象和数组,并提供了性能基准测试。
摘要由CSDN通过智能技术生成

要开始使用 GJSON,请安装 Go 并运行go get

$ go get -u github.com/tidwall/gjson

这将检索库。

获取一个值

Get 在 json 中搜索指定路径。路径采用点语法,例如“name.last”或“age”。当找到该值时,它会立即返回。

package main

import "github.com/tidwall/gjson"

const json = `{"name":{"first":"Janet","last":"Prichard"},"age":47}`

func main() {
	value := gjson.Get(json, "name.last")
	println(value.String())
}

这将打印:

<span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><span style="color:#1f2328"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>Prichard
</code></span></span></span></span>

还有用于一次获取多个值的GetMany函数,以及用于处理 JSON 字节切片的GetBytes 。

路径语法

下面是路径语法的快速概述,有关更完整的信息,请查看GJSON 语法

路径是一系列由点分隔的键。键可以包含特殊通配符“*”和“?”。要访问数组值,请使用索引作为键。要获取数组中的元素数或访问子路径,请使用“#”字符。点和通配符可以用“\”转义。

{
  "name": {
   "first": "Tom", "last": "Anderson"},
  "age":37,
  "children": ["Sara","Alex","Jack"],
  "fav.movie": "Deer Hunter",
  "friends": [
    {
   "first": "Dale", "last": "Murphy", "age": 44, "nets": ["ig", "fb", "tw"]},
    {
   "first": "Roger", "last": "Craig", "age": 68, "nets": ["fb", "tw"]},
    {
   "first": "Jane", "last": "Murphy", "age": 47, "nets": ["ig", "tw"]}
  ]
}
<span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><span style="color:#1f2328"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>"name.last"          >> "Anderson"
"age"                >> 37
"children"           >> ["Sara","Alex","Jack"]
"children.#"         >> 3
"children.1"         >> "Alex"
"child*.2"           >> "Jack"
"c?ildren.0"         >> "Sara"
"fav\.movie"         >> "Deer Hunter"
"friends.#.first"    >> ["Dale","Roger","Jane"]
"friends.1.last"     >> "Craig"
</code></span></span></span></span>

您还可以使用 查询数组中的第一个匹配项#(...),或使用 查找所有匹配项#(...)#。查询支持==!=<<=>>= 比较运算符以及简单模式匹配%(like)和!% (not like)运算符。

<span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><span style="color:#1f2328"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>friends.#(last=="Murphy").first    >> "Dale"
friends.#(last=="Murphy")#.first   >>
  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寻找优秀的自己

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值