Go?語言?json解析框架與?gjson?詳解
前言:
JSON 解析是我們不可避免的常見問題,在 Go 語言中,我們可以借助 gjson 庫來方便的進行 json 屬性的提取與解析,本文和大家一起上手與梳理 gjson 庫的使用。
1. 快速使用
快速安裝:
go get github.com/tidwall/gjson
Get() 方法解析 json 字符串:
json := `{"name":{"first":"uncle","last":"suta"}}`
lastName := gjson.Get(json, "name.last")
fmt.Println(lastName.String()) // "uncle"通過上面的例子,我們可以看到,使用 gjson 中的 Get() 方法,我們可以輕松愉快的進行 json 解析。
2. Get() 返回的 Result 結構體
Get() 方法在解析完 json 字符串后,返回的是一個 Result 結構體,其結構如下所示:
// Result represents a json value that is returned from Get().
type Result struct {
// Type is the json type
Type Type
// Raw is the raw json
Raw string
// Str is the json string
Str string
// Num is the json number
Num float64
// Index of raw value in original json, zero means index unknown
Index int
// Indexes of all the elements that match on a path containing the '#'
// query character.
Indexes []int
}但是,我們解析 json 所需要的往往是基本數據類型,因此,Result 結構體本身為我們實現了如下所示的豐富的方法來進行類型轉化:
String() string
Bool() bool
Int() int64
Uint() uint64
Float() float64
Time() time.Time
Array() []Result
IsObject() bool
IsArray() bool
ForEach(iterator func(key Result, value Result) bool)
Map() map[string]Result
Get(path string) Result
arrayOrMap(vc byte, valueize bool) (r arrayOrMapResult)
Exists() bool
Value() interface{}
Less(token Result, caseSensitive bool) bool
Paths(json string) []string
Path(json string) string3. 鍵路徑
在 gjson 中,鍵路徑實際上是以.分隔的一系列鍵。
gjson支持在鍵中包含通配符*和?,*匹配任意多個字符,?匹配單個字符。 例如abc*可以匹配abc1111/abc222/abc...等以abc開頭的鍵,ab?只能匹配ab1/ab2等以ab開頭且后面只有一個字符的鍵。
數組使用鍵名 + . + 索引(索引從 0 開始)的方式讀取元素,如果鍵a對應的值是一個數組,那么a.0讀取數組的第一個元素,a.1讀取第二個元素。
數組長度使用鍵名 + . + #獲取,例如a.#返回數組a的長度。
如果鍵名中出現.,那么需要使用\進行轉義。
4. json 數組遍歷
gjson還提供了通用的遍歷數組和對象的方式。gjson.Get()方法返回一個gjson.Result類型的對象,json.Result提供了ForEach()方法用于遍歷。該方法接受一個類型為func (key, value gjson.Result) bool的回調函數。遍歷對象時key和value分別為對象的鍵和值;遍歷數組時,value為數組元素,key為空(不是索引)?;卣{返回false時,遍歷停止:
json := `{"list": ["a", "b", "c"]}`
list := gjson.Get(json, "list")
list.ForEach(func(_, element gjson.Result) bool {
fmt.Println(element)
return true
})5. 其他
gjson.Valid() 可以對 json 字符串的合法性進行校驗。
gjson.GetMany() 可以一次解析多個字段。
到此這篇關于Go 語言 json解析框架與 gjson 詳解的文章就介紹到這了,更多相關Go json 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Golang中urlencode與urldecode編碼解碼詳解
這篇文章主要給大家介紹了關于Golang中urlencode與urldecode編碼解碼的相關資料,在Go語言中轉碼操作非常方便,可以使用內置的encoding包來快速完成轉碼操作,Go語言中的encoding包提供了許多常用的編碼解碼方式,需要的朋友可以參考下2023-09-09
使用client-go工具調用kubernetes API接口的教程詳解(v1.17版本)
這篇文章主要介紹了使用client-go工具調kubernetes API接口(v1.17版本),本文通過圖文實例相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08

