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

Go利用GJSON組件解鎖JSON讀取新姿勢

 更新時間:2025年03月25日 10:46:05   作者:Vespeng  
Go 標準庫提供了 encoding/json 包用于處理 json 數據,同時第三方庫 GJSON & SJSON 也在 json 處理方面表現出色,下面我們就來看看如何使用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 數據中的特定值。

官網地址:GitHub - tidwall/gjson

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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • golang 中string和int類型相互轉換

    golang 中string和int類型相互轉換

    這篇文章主要介紹了golang 中string和int類型相互轉換,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • GO語言中通道和sync包的使用教程分享

    GO語言中通道和sync包的使用教程分享

    這篇文章主要為大家詳細介紹了Go語言中通道和sync包的相關資料,文中的示例代碼講解詳細,對我們學習Go語言有一定的幫助,需要的可以參考一下
    2023-02-02
  • Go語言Select chan用法小結

    Go語言Select chan用法小結

    select語句是Go語言中用于處理多個通道操作的關鍵字,它允許你在多個通道上進行非阻塞的選擇操作,本文就詳細介紹一下如何使用,感興趣的可以了解一下
    2023-09-09
  • go語言中iota和左移右移的使用說明

    go語言中iota和左移右移的使用說明

    這篇文章主要介紹了go語言中iota和左移右移的使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • 詳解Golang中字符串的使用

    詳解Golang中字符串的使用

    這篇文章主要為大家詳細介紹了Golang中字符串的使用,文中的示例代碼講解詳細,對我們學習Golang有一定的幫助,感興趣的小伙伴可以了解一下
    2022-10-10
  • Golang程序如何查找內存泄漏(pprof)

    Golang程序如何查找內存泄漏(pprof)

    該文章詳細介紹了如何使用Golang的pprof工具查找內存泄漏,首先,在main包中引入pprof包并設置條件編譯,然后編譯程序并運行,通過執(zhí)行gotoolpprof-inuse_space命令,可以進入交互模式并使用top命令查看內存分配最多的函數,如果本機中有源代碼
    2024-12-12
  • Go實現共享庫的方法

    Go實現共享庫的方法

    本文主要介紹了Go實現共享庫的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • 基于Go和PHP語言實現爬樓梯算法的思路詳解

    基于Go和PHP語言實現爬樓梯算法的思路詳解

    這篇文章主要介紹了Go和PHP 實現爬樓梯算法,本文通過動態(tài)規(guī)劃和斐波那契數列兩種解決思路給大家講解的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • Go語言實現權重抽獎系統(tǒng)的項目實踐

    Go語言實現權重抽獎系統(tǒng)的項目實踐

    本文主要介紹了Go語言實現權重抽獎系統(tǒng)的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-04-04
  • GIN的路由以及傳參問題

    GIN的路由以及傳參問題

    本文主要介紹了GIN的路由以及傳參問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06

最新評論