文档手册

gjson库快速解析json

2024-05-15 09:24:01

golang中快速获取 JSON 值

GJSON 是一个 Go 包,提供了一种快速简单的方式来从 JSON 文档中获取值。它具有一行检索、点符号路径、迭代和解析 JSON 行等功能。

还可以查看 SJSON 用于修改 JSON,以及 JJ 命令行工具。

此 README 是如何使用 GJSON 的快速概述,更多信息请查看 GJSON 语法。

GJSON 还可用于 Python 和 Rust 入门指南 安装

要开始使用 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())
}


这将打印:  Prichard


还有 GetMany 函数可以一次获取多个值,以及 GetBytes 用于处理 JSON 字节片。 路径语法

以下是路径语法的快速概述,更完整的信息请查看 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"]}
  ]
}


"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"

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

friends.#(last=="Murphy").first >> "Dale" friends.#(last=="Murphy")#.first >> ["Dale","Jane"] friends.#(age>45)#.last >> ["Craig","Murphy"] friends.#(first%"D*").last >> "Murphy" friends.#(first!%"D*").last >> "Craig" friends.#(nets.#(=="fb"))#.first >> ["Dale","Roger"]

请注意,截至 v1.3.0,查询使用 #[...] 括号。这在 v1.3.0 中更改,以避免与新的多路径语法混淆。为了向后兼容,#[...] 将继续在下一个主要版本发布之前起作用。