欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go?語言?json解析框架與?gjson?詳解

 更新時間:2022年07月31日 11:34:07   作者:樹獺叔叔???????  
這篇文章主要介紹了Go語言json解析框架與gjson,JSON?解析是我們不可避免的常見問題,在Go語言中,我們可以借助gjson庫來方便的進行json屬性的提取與解析,需要的朋友可以參考一下

前言:

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 所需要的往往是基本數(shù)據(jù)類型,因此,Result 結構體本身為我們實現(xiàn)了如下所示的豐富的方法來進行類型轉化:

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) string

3. 鍵路徑

在 gjson 中,鍵路徑實際上是以.分隔的一系列鍵。

gjson支持在鍵中包含通配符*?,*匹配任意多個字符,?匹配單個字符。 例如abc*可以匹配abc1111/abc222/abc...等以abc開頭的鍵,ab?只能匹配ab1/ab2等以ab開頭且后面只有一個字符的鍵。

數(shù)組使用鍵名 + . + 索引(索引從 0 開始)的方式讀取元素,如果鍵a對應的值是一個數(shù)組,那么a.0讀取數(shù)組的第一個元素,a.1讀取第二個元素。

數(shù)組長度使用鍵名 + . + #獲取,例如a.#返回數(shù)組a的長度。

如果鍵名中出現(xiàn).,那么需要使用\進行轉義。

4. json 數(shù)組遍歷

gjson還提供了通用的遍歷數(shù)組和對象的方式。gjson.Get()方法返回一個gjson.Result類型的對象,json.Result提供了ForEach()方法用于遍歷。該方法接受一個類型為func (key, value gjson.Result) bool的回調(diào)函數(shù)。遍歷對象時keyvalue分別為對象的鍵和值;遍歷數(shù)組時,value為數(shù)組元素,key為空(不是索引)。回調(diào)返回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 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 一文搞懂Go語言標準庫strconv

    一文搞懂Go語言標準庫strconv

    strconv包實現(xiàn)了基本數(shù)據(jù)類型和其字符串表示的相互轉換,本文主要介紹Go語言標準庫strconv,想要學習strconv標準庫的可以了解一下
    2023-04-04
  • 利用golang進行OpenCV學習和開發(fā)的步驟

    利用golang進行OpenCV學習和開發(fā)的步驟

    目前,OpenCV逐步成為一個通用的基礎研究和產(chǎn)品開發(fā)平臺,下面這篇文章主要給大家介紹了關于利用golang進行OpenCV學習和開發(fā)的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-09-09
  • 詳解Golang中的Mutex并發(fā)原語

    詳解Golang中的Mutex并發(fā)原語

    Mutex?是?Go?語言中互斥鎖的實現(xiàn),它是一種同步機制,用于控制多個?goroutine?之間的并發(fā)訪問。本文將著重介紹?Go?的?Mutex?并發(fā)原語,希望對大家有所幫助
    2023-03-03
  • Go語言參數(shù)傳遞是傳值還是傳引用

    Go語言參數(shù)傳遞是傳值還是傳引用

    Go?語言到底是傳值(值傳遞),還是傳引用(引用傳遞)?本文就詳細介紹一下,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Go語言開發(fā)編程規(guī)范命令風格代碼格式

    Go語言開發(fā)編程規(guī)范命令風格代碼格式

    這篇文章主要為大家介紹了Go語言開發(fā)編程規(guī)范命令風格代碼格式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Go中Gzip與json搭配實現(xiàn)數(shù)據(jù)壓縮demo

    Go中Gzip與json搭配實現(xiàn)數(shù)據(jù)壓縮demo

    這篇文章主要為大家介紹了Go中Gzip與json搭配使用壓縮數(shù)據(jù)的實現(xiàn)demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • golang中使用匿名結構體的方法

    golang中使用匿名結構體的方法

    這篇文章主要介紹了golang中使用匿名結構體,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • 關于golang中平行賦值淺析

    關于golang中平行賦值淺析

    這篇文章主要給大家介紹了關于golang中平行賦值的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用golang具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-08-08
  • go?doudou開發(fā)單體RESTful服務快速上手教程

    go?doudou開發(fā)單體RESTful服務快速上手教程

    這篇文章主要為大家介紹了go?doudou開發(fā)單體RESTful服務快速上手教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Golang實現(xiàn)簡易的命令行功能

    Golang實現(xiàn)簡易的命令行功能

    這篇文章主要為大家詳細介紹了如何通過Golang實現(xiàn)一個簡易的命令行功能,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的可以了解一下
    2023-02-02

最新評論