Go利用GJSON組件解鎖JSON讀取新姿勢
在 Go 語言開發(fā)領域,json 數據處理是極為常見的任務。Go 標準庫提供了 encoding/json
包用于處理 json 數據,同時第三方庫 GJSON
& SJSON
也在 json 處理方面表現出色。
本文將深入探討下 GJSON 組件,通過與原生處理方式對比,它存在什么特別之處,它的優(yōu)勢體現在哪。
一、Go 原生 json 讀取方式
Go 原生讀取 json 數據,通常需先定義結構體,然后再將 json 數據解析到結構體實例,如:
{ "name": "張三", "age": 25 }
具體處理邏輯:
package main import ( "encoding/json" "fmt" ) type Person struct { Name string `json:"name"` Age int `json:"age"` } func main() { jsonStr := `{"name":"張三","age":25}` var person Person err := json.Unmarshal([]byte(jsonStr), &person) if err!= nil { fmt.Println("解析錯誤:", err) return } fmt.Println("Name:", person.Name) fmt.Println("Age:", person.Age) }
這種方式雖能準確解析 json 數據,但如果 json 存在多層嵌套,層級過度包裝,那么結構體定義以及解析過程就會變得相當繁瑣。
二、GJSON 組件
1、概述
GJSON 是一個輕量級且高性能的 JSON 解析庫,它允許開發(fā)者通過簡潔的語法,無需定義結構體,就能快速提取 JSON 數據中的特定值。
2、安裝
使用 Go 的包管理工具 go get
安裝 GJSON:
go get -u github.com/tidwall/gjson
三、GJSON 基本用法
1、簡單 json 數據獲取
對于簡單的 json,像前面那個例子,直接用 gjson.Get
方法,傳入 json 字符串和要獲取的字段名,就能拿到對應的值。比如獲取 name
字段,gjson.Get(jsonStr, "name")
就可以搞定,例如:
package main import ( "fmt" "github.com/tidwall/gjson" ) func main() { jsonStr := `{"name":"張三","age":25}` name := gjson.Get(jsonStr, "name") age := gjson.Get(jsonStr, "age") fmt.Println("Name:", name.String()) fmt.Println("Age:", age.Int()) }
2、嵌套 json 數據獲取
上述提到,原生的處理方式對于多層級的 json 很不友好,然而 gjon 可以直接通過點號分隔路徑定位數據,這時候它的優(yōu)勢就逐漸明顯,例如:
{ "name": "張三", "age": 25, "hobby": { "sing": "只因你太美", "dance": "背帶褲", "rap": "kun", "ball": "籃球" } }
具體處理邏輯:
package main import ( "fmt" "github.com/tidwall/gjson" ) func main() { jsonStr := `{ "name": "張三", "age": 25, "hobby": { "sing": "只因你太美", "dance": "背帶褲", "rap": "kun", "ball": "籃球" }` name := gjson.Get(jsonStr, "name") ball := gjson.Get(jsonStr, "hobby.ball") fmt.Println("Name:", name.String()) fmt.Println("ball:", ball.String()) }
相比原生方式,無需復雜結構體定義,操作更簡便。
3、json 數組處理
如果在 json 中嵌套了數組,對于這種的處理也比較簡單,直接通過數組下標來定位數據即可,如:
package main import ( "fmt" "github.com/tidwall/gjson" ) func main() { jsonStr := `{"hobby": ["sing","dance","rap","ball"]}` hobby := gjson.Get(jsonStr, "hobby.3") // 輸出第4個愛好 fmt.Println("hobby:", hobby.String()) }
相比于原生方式處理數組,得先解析成切片,操作起來就沒這么直接。
四、GJSON 與原生 JSON 處理方式對比
- GJSON 語法簡單直觀,熟悉 json 結構即可快速上手,無需學習結構體定義及標簽使用等知識。而原生方式在結構體定義上相對復雜,尤其是處理復雜 json 結構時。
- GJSON 無需將整個 json 數據解析為結構體,在處理大型 json 數據時,內存占用少,解析速度快。原生方式在解析復雜 json 數據時,結構體構建和內存分配開銷較大。
- GJSON 對各種復雜 json 結構都能靈活應對,根據需求按路徑獲取數據,無需頻繁修改代碼結構。原生方式則需根據 json 結構變化,頻繁修改結構體定義,靈活性較差。
到此這篇關于Go利用GJSON組件解鎖JSON讀取新姿勢的文章就介紹到這了,更多相關Go GJSON讀取JSON內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!