一、快速上手
GJSON 是一个 Go 语言下的 JSON 解析库,它支持链式访问、模糊查找和简单修改。要在一个程序中使用 GJSON,只需要引入相应的包并使用类似于 XPath 的表达式访问 JSON。
package main
import "fmt"
import "github.com/tidwall/gjson"
const json = `{"name":{"first":"Tom","last":"Hanks"},"age":62}`
func main() {
name := gjson.Get(json, "name.last")
age := gjson.Get(json, "age")
fmt.Println(name.String()) // "Hanks"
fmt.Println(age.Int()) // 62
}
二、链式访问
GJSON 提供了一种链式访问 JSON 的方式,这使得访问和操作 JSON 的过程更加直观和简单。
result := gjson.Get(json, "name.first").String() // "Tom"
上面的代码使用了链式访问方式,先定位到 JSON 中的 `name` 属性,再获取其中的 `first` 属性。这种访问方式的语法和 XPath 的表达式类似,使得读取和操作 JSON 变得十分方便。
三、模糊查找
GJSON 支持使用通配符实现模糊查找,从而更加方便地获取 JSON 中的数据。
const json = `{"people":[{"name":"Tom","age":30},{"name":"Mike","age":28}]}`
// 查找所有人的名字
result := gjson.Get(json, "people.#.name")
// result.String() == `["Tom","Mike"]`
上述代码使用 `#.name` 这一表达式实现了对 JSON 中所有人的名字的查找。通过这种方式,我们可以快速地定位到 JSON 中的数据。
四、修改 JSON
GJSON 也支持对 JSON 对象进行修改,这使得对 JSON 的操作更加灵活。下面的代码实现了向 JSON 中添加一个新的属性。
const json = `{"name":{"first":"Tom","last":"Hanks"},"age":62}`
// 添加新属性
result := gjson.Parse(json).Set("job", "actor")
// result.String() == `{"name":{"first":"Tom","last":"Hanks"},"age":62,"job":"actor"}`
上述代码中,我们使用了 `Set` 函数向 JSON 中添加一个名为 `job` 值为 `actor` 的新属性,这使得对 JSON 的操作十分方便。
五、GJSON 的性能表现
GJSON 的性能是相对较好的,它使用了类似于 XPath 的表达式方式访问 JSON,同时支持了链式访问和模糊查找,使得读取和操作 JSON 变得相对便捷。
下面是使用 GJSON 和标准库解析 JSON 的性能对比结果:
goos: darwin
goarch: amd64
pkg: github.com/tidwall/gjson-bench
BenchmarkStdlib-12 2000000 962 ns/op
BenchmarkGJSON-12 10000000 172 ns/op
PASS
ok github.com/tidwall/gjson-bench 4.121s
可以看到,GJSON 的性能远超标准库,这也是它受到广泛欢迎的原因之一。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/279621.html