亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Go通過(guò)SJSON實(shí)現(xiàn)動(dòng)態(tài)修改JSON

 更新時(shí)間:2025年03月25日 10:57:04   作者:Vespeng  
在Go語(yǔ)言 json 處理領(lǐng)域,在 json 數(shù)據(jù)處理中,讀取與修改是兩個(gè)核心需求,本文我們就來(lái)看看如何使用SJSON進(jìn)行動(dòng)態(tài)修改JSON吧,有需要的小伙伴可以了解下

在Go語(yǔ)言 json 處理領(lǐng)域,在 json 數(shù)據(jù)處理中,讀取與修改是兩個(gè)核心需求。前文介紹的 GJSON 解決了靈活讀取問(wèn)題,而 SJSON 作為其姊妹庫(kù),則專(zhuān)注于實(shí)現(xiàn)無(wú)需結(jié)構(gòu)體定義的 json 動(dòng)態(tài)修改。

本文將延續(xù)對(duì)比分析風(fēng)格,解析 SJSON 的核心價(jià)值。

一、Go 原生 json 修改方式

Go 原生修改 json 數(shù)據(jù),同樣需先定義結(jié)構(gòu)體,然后再將 json 數(shù)據(jù)解析到結(jié)構(gòu)體實(shí)例,如:

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("解析錯(cuò)誤:", err)
       return
    }

    person.Age = 35
    newJson, _ := json.Marshal(person)

    fmt.Println(string(newJson))
}

二、SJSON 組件

1、概述

SJSON 提供通過(guò)路徑表達(dá)式直接修改 json 字符串的能力,與 GJSON 采用相同路徑語(yǔ)法,形成讀寫(xiě)閉環(huán)。

官網(wǎng)地址:GitHub - tidwall/sjson

2、安裝

使用 Go 的包管理工具 go get 安裝 SJSON:

go get -u github.com/tidwall/sjson

三、SJSON核心用法

1、基礎(chǔ)值修改

package main

import (
    "fmt"
    "github.com/tidwall/sjson"
)

func main() {
    jsonStr := `{"name":"張三","age":25}`

    // 修改 age 值為 35
    newJson, _ := sjson.Set(jsonStr, "age", 35)

    fmt.Println(string(newJson))
}

2、嵌套結(jié)構(gòu)修改

package main

import (
    "fmt"
    "github.com/tidwall/sjson"
)

func main() {
    jsonStr := `{
       "name": "張三",
       "age": 25,
       "hobby": {
          "sing": "只因你太美",
          "dance": "背帶褲",
          "rap": "kun",
          "ball": "籃球"
       }`

    // 修改 hobby.sing 的值: 只因你太美 => 重生
    newJson, _ := sjson.Set(jsonStr, "hobby.sing", "重生")

    fmt.Println(string(newJson))
}

3、數(shù)組操作

package main

import (
    "fmt"
    "github.com/tidwall/sjson"
)

func main() {
    jsonStr := `{"hobby": ["sing","dance","rap","ball"]}`

    // 修改 hobby 數(shù)組第4個(gè)元素為 play
    newJson, _ := sjson.Set(jsonStr, "hobby.3", "play")

    fmt.Println(string(newJson))

    // 追加 hobby 數(shù)組第5個(gè)元素為 play
    newJson, _ = sjson.Set(jsonStr, "tags.-1", "play")
    fmt.Println(string(newJson))
}

4、字段刪除

package main

import (
    "fmt"
    "github.com/tidwall/sjson"
)

func main() {
    jsonStr := `{"name":"張三","age":25}`

    // 刪除age字段
    newJson, _ := sjson.Delete(jsonStr, "age")

    fmt.Println(string(newJson))
}

四、SJSON 與原生方案對(duì)比

  • SJSON 擺脫結(jié)構(gòu)體定義束縛,保持原始 json 結(jié)構(gòu)完整性,避免修改后丟失未定義字段的問(wèn)題。
  • SJSON 路徑直達(dá)修改位置,規(guī)避嵌套結(jié)構(gòu)嵌套帶來(lái)的問(wèn)題,與 GJSON 組成完整處理鏈路。
  • SJSON 支持運(yùn)行時(shí)動(dòng)態(tài)路徑構(gòu)建,避免硬編碼路徑帶來(lái)的問(wèn)題。

到此這篇關(guān)于Go通過(guò)SJSON實(shí)現(xiàn)動(dòng)態(tài)修改JSON的文章就介紹到這了,更多相關(guān)Go動(dòng)態(tài)修改JSON內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang并發(fā)編程中Goroutine 協(xié)程的實(shí)現(xiàn)

    golang并發(fā)編程中Goroutine 協(xié)程的實(shí)現(xiàn)

    Go語(yǔ)言中的協(xié)程是一種輕量級(jí)線程,通過(guò)在函數(shù)前加go關(guān)鍵字來(lái)并發(fā)執(zhí)行,具有動(dòng)態(tài)棧、快速啟動(dòng)和低內(nèi)存使用等特點(diǎn),本文就來(lái)詳細(xì)的介紹一下,感興趣的可以了解一下
    2024-10-10
  • Go語(yǔ)言實(shí)現(xiàn)一個(gè)Http?Server框架(一)?http庫(kù)的使用

    Go語(yǔ)言實(shí)現(xiàn)一個(gè)Http?Server框架(一)?http庫(kù)的使用

    本文主要介紹用Go語(yǔ)言實(shí)現(xiàn)一個(gè)Http?Server框架中對(duì)http庫(kù)的基本使用說(shuō)明,文中有詳細(xì)的代碼示例,感興趣的同學(xué)可以借鑒一下
    2023-04-04
  • go實(shí)現(xiàn)for range迭代時(shí)修改值的操作

    go實(shí)現(xiàn)for range迭代時(shí)修改值的操作

    這篇文章主要介紹了go實(shí)現(xiàn)for range迭代時(shí)修改值的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • golang 監(jiān)聽(tīng)服務(wù)的信號(hào),實(shí)現(xiàn)平滑啟動(dòng),linux信號(hào)說(shuō)明詳解

    golang 監(jiān)聽(tīng)服務(wù)的信號(hào),實(shí)現(xiàn)平滑啟動(dòng),linux信號(hào)說(shuō)明詳解

    這篇文章主要介紹了golang 監(jiān)聽(tīng)服務(wù)的信號(hào),實(shí)現(xiàn)平滑啟動(dòng),linux信號(hào)說(shuō)明詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • 解決go build不去vendor下查找包的問(wèn)題

    解決go build不去vendor下查找包的問(wèn)題

    這篇文章主要介紹了解決go build不去vendor下查找包的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • golang三元表達(dá)式的使用方法

    golang三元表達(dá)式的使用方法

    這篇文章主要介紹了golang三元表達(dá)式的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • golang編程開(kāi)發(fā)使用sort排序示例詳解

    golang編程開(kāi)發(fā)使用sort排序示例詳解

    這篇文章主要為大家介紹了go語(yǔ)言編程開(kāi)發(fā)使用sort來(lái)排序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2021-11-11
  • Go調(diào)用C++動(dòng)態(tài)庫(kù)實(shí)現(xiàn)車(chē)牌識(shí)別的示例代碼

    Go調(diào)用C++動(dòng)態(tài)庫(kù)實(shí)現(xiàn)車(chē)牌識(shí)別的示例代碼

    本文主要介紹了如何利用C++中Opencv、TensorRT等庫(kù)編譯出動(dòng)態(tài)庫(kù)供Go調(diào)用,再寫(xiě)個(gè)簡(jiǎn)單的api對(duì)上傳的車(chē)輛圖片進(jìn)行車(chē)牌識(shí)別,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • Go中strings包的基本使用示例代碼

    Go中strings包的基本使用示例代碼

    本文詳細(xì)介紹了Go語(yǔ)言中strings包的基本使用方法,包括字符串的前綴、后綴判斷,字符串包含、索引查找、字符串替換、計(jì)數(shù)、重復(fù)、大小寫(xiě)轉(zhuǎn)換、修剪、分割、拼接以及數(shù)據(jù)類(lèi)型轉(zhuǎn)換等功能,示例代碼豐富,適合初學(xué)者和需要使用字符串處理功能的開(kāi)發(fā)者參考學(xué)習(xí)
    2024-10-10
  • Go語(yǔ)言實(shí)現(xiàn)對(duì)XML的讀取和修改

    Go語(yǔ)言實(shí)現(xiàn)對(duì)XML的讀取和修改

    這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言實(shí)現(xiàn)對(duì)XML的讀取和修改的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12

最新評(píng)論