一、快速上手
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/zh-tw/n/279621.html