GJSON:Go語言下的 JSON 解析庫

一、快速上手

GJSON 是一個 Go 語言下的 JSON 解析庫,它支持鏈式訪問、模糊查找和簡單修改。要在一個程序中使用 GJSON,只需要引入相應的包並使用類似於 XPath 的表達式訪問 JSON。

package main

import "fmt"
import "github.com/tidwall/gjson"

const json = `{"name":{"first":"Tom","last":"Hanks"},"age":62}`

func main() {
    name := gjson.Get(json, "name.last")
    age := gjson.Get(json, "age")

    fmt.Println(name.String()) // "Hanks"
    fmt.Println(age.Int())     // 62
}

二、鏈式訪問

GJSON 提供了一種鏈式訪問 JSON 的方式,這使得訪問和操作 JSON 的過程更加直觀和簡單。

result := gjson.Get(json, "name.first").String() // "Tom"

上面的代碼使用了鏈式訪問方式,先定位到 JSON 中的 `name` 屬性,再獲取其中的 `first` 屬性。這種訪問方式的語法和 XPath 的表達式類似,使得讀取和操作 JSON 變得十分方便。

三、模糊查找

GJSON 支持使用通配符實現模糊查找,從而更加方便地獲取 JSON 中的數據。

const json = `{"people":[{"name":"Tom","age":30},{"name":"Mike","age":28}]}`

// 查找所有人的名字
result := gjson.Get(json, "people.#.name")
// result.String() == `["Tom","Mike"]`

上述代碼使用 `#.name` 這一表達式實現了對 JSON 中所有人的名字的查找。通過這種方式,我們可以快速地定位到 JSON 中的數據。

四、修改 JSON

GJSON 也支持對 JSON 對象進行修改,這使得對 JSON 的操作更加靈活。下面的代碼實現了向 JSON 中添加一個新的屬性。

const json = `{"name":{"first":"Tom","last":"Hanks"},"age":62}`

// 添加新屬性
result := gjson.Parse(json).Set("job", "actor")
// result.String() == `{"name":{"first":"Tom","last":"Hanks"},"age":62,"job":"actor"}`

上述代碼中,我們使用了 `Set` 函數向 JSON 中添加一個名為 `job` 值為 `actor` 的新屬性,這使得對 JSON 的操作十分方便。

五、GJSON 的性能表現

GJSON 的性能是相對較好的,它使用了類似於 XPath 的表達式方式訪問 JSON,同時支持了鏈式訪問和模糊查找,使得讀取和操作 JSON 變得相對便捷。

下面是使用 GJSON 和標準庫解析 JSON 的性能對比結果:

goos: darwin
goarch: amd64
pkg: github.com/tidwall/gjson-bench
BenchmarkStdlib-12          2000000               962 ns/op
BenchmarkGJSON-12          10000000               172 ns/op
PASS
ok      github.com/tidwall/gjson-bench     4.121s

可以看到,GJSON 的性能遠超標準庫,這也是它受到廣泛歡迎的原因之一。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/279621.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-20 15:04
下一篇 2024-12-20 15:04

相關推薦

  • 運維Python和GO應用實踐指南

    本文將從多個角度詳細闡述運維Python和GO的實際應用,包括監控、管理、自動化、部署、持續集成等方面。 一、監控 運維中的監控是保證系統穩定性的重要手段。Python和GO都有強…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • go-chassis

    本文將深入探究go-chassis,包括它的基本概念,特性,以及如何使用它構建微服務應用程序。 一、微服務架構及其優勢 微服務架構是一種將應用程序拆分為小型、自治服務的體系結構。每…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • JSON的MD5

    在Web開發過程中,JSON(JavaScript Object Notation)是最常用的數據格式之一。MD5(Message-Digest Algorithm 5)是一種常用…

    編程 2025-04-29
  • 使用Java將JSON寫入HDFS

    本篇文章將從以下幾個方面詳細闡述Java將JSON寫入HDFS的方法: 一、HDFS簡介 首先,先來了解一下Hadoop分布式文件系統(HDFS)。HDFS是一個可擴展性高的分布式…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28

發表回復

登錄後才能評論