最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go?語(yǔ)言?json解析框架與?gjson?詳解

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

前言:

JSON 解析是我們不可避免的常見(jiàn)問(wèn)題,在 Go 語(yǔ)言中,我們可以借助 gjson 庫(kù)來(lái)方便的進(jìn)行 json 屬性的提取與解析,本文和大家一起上手與梳理 gjson 庫(kù)的使用。

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"

通過(guò)上面的例子,我們可以看到,使用 gjson 中的 Get() 方法,我們可以輕松愉快的進(jìn)行 json 解析。

2. Get() 返回的 Result 結(jié)構(gòu)體

Get() 方法在解析完 json 字符串后,返回的是一個(gè) Result 結(jié)構(gòu)體,其結(jié)構(gòu)如下所示:

// 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ù)類(lèi)型,因此,Result 結(jié)構(gòu)體本身為我們實(shí)現(xiàn)了如下所示的豐富的方法來(lái)進(jìn)行類(lèi)型轉(zhuǎ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 中,鍵路徑實(shí)際上是以.分隔的一系列鍵。

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

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

數(shù)組長(zhǎng)度使用鍵名 + . + #獲取,例如a.#返回?cái)?shù)組a的長(zhǎng)度。

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

4. json 數(shù)組遍歷

gjson還提供了通用的遍歷數(shù)組和對(duì)象的方式。gjson.Get()方法返回一個(gè)gjson.Result類(lèi)型的對(duì)象,json.Result提供了ForEach()方法用于遍歷。該方法接受一個(gè)類(lèi)型為func (key, value gjson.Result) bool的回調(diào)函數(shù)。遍歷對(duì)象時(shí)keyvalue分別為對(duì)象的鍵和值;遍歷數(shù)組時(shí),value為數(shù)組元素,key為空(不是索引)?;卣{(diào)返回false時(shí),遍歷停止:

  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() 可以對(duì) json 字符串的合法性進(jìn)行校驗(yàn)。

gjson.GetMany() 可以一次解析多個(gè)字段。

到此這篇關(guān)于Go 語(yǔ)言 json解析框架與 gjson 詳解的文章就介紹到這了,更多相關(guān)Go json 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang實(shí)現(xiàn)Java虛擬機(jī)之解析class文件詳解

    Golang實(shí)現(xiàn)Java虛擬機(jī)之解析class文件詳解

    這篇文章主要為大家詳細(xì)介紹了Golang實(shí)現(xiàn)Java虛擬機(jī)之解析class文件的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • Go雪花算法的作用領(lǐng)域及實(shí)現(xiàn)方法示例

    Go雪花算法的作用領(lǐng)域及實(shí)現(xiàn)方法示例

    這篇文章主要為大家介紹了Go雪花算法的作用領(lǐng)域及實(shí)現(xiàn)方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Golang中urlencode與urldecode編碼解碼詳解

    Golang中urlencode與urldecode編碼解碼詳解

    這篇文章主要給大家介紹了關(guān)于Golang中urlencode與urldecode編碼解碼的相關(guān)資料,在Go語(yǔ)言中轉(zhuǎn)碼操作非常方便,可以使用內(nèi)置的encoding包來(lái)快速完成轉(zhuǎn)碼操作,Go語(yǔ)言中的encoding包提供了許多常用的編碼解碼方式,需要的朋友可以參考下
    2023-09-09
  • golang實(shí)現(xiàn)各種情況的get請(qǐng)求操作

    golang實(shí)現(xiàn)各種情況的get請(qǐng)求操作

    這篇文章主要介紹了golang實(shí)現(xiàn)各種情況的get請(qǐng)求操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • 使用client-go工具調(diào)用kubernetes API接口的教程詳解(v1.17版本)

    使用client-go工具調(diào)用kubernetes API接口的教程詳解(v1.17版本)

    這篇文章主要介紹了使用client-go工具調(diào)kubernetes API接口(v1.17版本),本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • Go語(yǔ)言使用Redis和Etcd實(shí)現(xiàn)高性能分布式鎖

    Go語(yǔ)言使用Redis和Etcd實(shí)現(xiàn)高性能分布式鎖

    這篇文章主要為大家介紹了Go語(yǔ)言使用Redis實(shí)現(xiàn)高性能分布式鎖示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Goland使用delve進(jìn)行遠(yuǎn)程調(diào)試的詳細(xì)教程

    Goland使用delve進(jìn)行遠(yuǎn)程調(diào)試的詳細(xì)教程

    網(wǎng)上給出的使用delve進(jìn)行遠(yuǎn)程調(diào)試,都需要先在本地交叉編譯或者在遠(yuǎn)程主機(jī)上編譯出可運(yùn)行的程序,然后再用delve在遠(yuǎn)程啟動(dòng)程序,本教程會(huì)將上面的步驟簡(jiǎn)化為只需要兩步,1,在遠(yuǎn)程運(yùn)行程序2,在本地啟動(dòng)調(diào)試,需要的朋友可以參考下
    2024-08-08
  • golang中日期操作之日期格式化及日期轉(zhuǎn)換

    golang中日期操作之日期格式化及日期轉(zhuǎn)換

    在編程中,程序員會(huì)經(jīng)常使用到日期相關(guān)操作,下面這篇文章主要給大家介紹了關(guān)于golang中日期操作之日期格式化及日期轉(zhuǎn)換的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • Golang?中的?條件變量(sync.Cond)詳解

    Golang?中的?條件變量(sync.Cond)詳解

    這篇文章主要介紹了Golang?中的?條件變量(sync.Cond)詳解的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • 記一次go語(yǔ)言使用time.Duration類(lèi)型踩過(guò)的坑

    記一次go語(yǔ)言使用time.Duration類(lèi)型踩過(guò)的坑

    本文主要介紹了記一次go語(yǔ)言使用time.Duration類(lèi)型踩過(guò)的坑,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評(píng)論

辽源市| 苏尼特右旗| 镶黄旗| 阳泉市| 望都县| 乳山市| 珠海市| 普格县| 东源县| 海原县| 桐梓县| 泾源县| 太白县| 苍梧县| 屏山县| 柳州市| 乐安县| 大余县| 龙岩市| 克东县| 阳曲县| 花莲市| 贵定县| 塔河县| 克什克腾旗| 卢氏县| 勃利县| 施甸县| 奉化市| 安塞县| 正镶白旗| 海淀区| 永新县| 两当县| 仙桃市| 深水埗区| 景洪市| 阿鲁科尔沁旗| 泾阳县| 滦平县| 喀喇沁旗|