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

Go通過SJSON實現(xiàn)動態(tài)修改JSON

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

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

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

一、Go 原生 json 修改方式

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

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
    }

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

    fmt.Println(string(newJson))
}

二、SJSON 組件

1、概述

SJSON 提供通過路徑表達(dá)式直接修改 json 字符串的能力,與 GJSON 采用相同路徑語法,形成讀寫閉環(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個元素為 play
    newJson, _ := sjson.Set(jsonStr, "hobby.3", "play")

    fmt.Println(string(newJson))

    // 追加 hobby 數(shù)組第5個元素為 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 與原生方案對比

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

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

相關(guān)文章

  • Go語言map字典用法實例分析

    Go語言map字典用法實例分析

    這篇文章主要介紹了Go語言map字典用法,實例分析了map字典的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • Go 每日一庫之termtables的使用

    Go 每日一庫之termtables的使用

    本文主要介紹了Go 每日一庫之termtables的使用,termtables處理表格形式數(shù)據(jù)的輸出。是一個很小巧的工具庫。具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • gRPC超時攔截器實現(xiàn)示例

    gRPC超時攔截器實現(xiàn)示例

    這篇文章主要為大家介紹了gRPC超時攔截器實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 基于context.Context的Golang?loader緩存請求放大問題解決

    基于context.Context的Golang?loader緩存請求放大問題解決

    這篇文章主要為大家介紹了基于context.Context的Golang?loader緩存請求放大解決方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Go語言中嵌入C語言的方法

    Go語言中嵌入C語言的方法

    這篇文章主要介紹了Go語言中嵌入C語言的方法,實例分析了Go語言中cgo工具的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • go語言使用pipe讀取子進(jìn)程標(biāo)準(zhǔn)輸出的方法

    go語言使用pipe讀取子進(jìn)程標(biāo)準(zhǔn)輸出的方法

    這篇文章主要介紹了go語言使用pipe讀取子進(jìn)程標(biāo)準(zhǔn)輸出的方法,實例分析了Go語言針對進(jìn)程操作的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • Go語言判斷文件或文件夾是否存在的方法

    Go語言判斷文件或文件夾是否存在的方法

    這篇文章主要介紹了Go語言判斷文件或文件夾是否存在的方法,結(jié)合具體實例形式對比分析了Go語言針對文件與目錄判斷的操作技巧與相關(guān)注意事項,需要的朋友可以參考下
    2017-05-05
  • Go語言實現(xiàn)Snowflake雪花算法

    Go語言實現(xiàn)Snowflake雪花算法

    雪花算法產(chǎn)生的背景當(dāng)然是twitter高并發(fā)環(huán)境下對唯一ID生成的需求,得益于twitter內(nèi)部牛的技術(shù),雪花算法能夠流傳于至今并且被廣泛使用,本文就詳細(xì)的介紹一下,感興趣的可以了解一下
    2021-06-06
  • Go?Build編譯打包文件的完整步驟

    Go?Build編譯打包文件的完整步驟

    go build命令是用于編譯Go語言程序并生成可執(zhí)行文件,它可以將Go源代碼編譯成機(jī)器代碼,并將其打包成可執(zhí)行文件,方便在不同的操作系統(tǒng)上運行,這篇文章主要給大家介紹了關(guān)于Go?Build編譯打包文件的完整步驟,需要的朋友可以參考下
    2024-02-02
  • Go語言resty http包調(diào)用jenkins api實例

    Go語言resty http包調(diào)用jenkins api實例

    這篇文章主要為大家介紹了Go語言resty http包調(diào)用jenkins api實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06

最新評論

双鸭山市| 桂东县| 兴宁市| 抚顺市| 若羌县| 镇安县| 阳谷县| 长岭县| 长丰县| 平乡县| 安远县| 兴文县| 榕江县| 搜索| 曲沃县| 海口市| 察哈| 阿克苏市| 宝清县| 安吉县| 浮山县| 阳信县| 浠水县| 镇赉县| 库车县| 鄄城县| 蛟河市| 于田县| 民县| 霍州市| 边坝县| 吴川市| 普洱| 济源市| 浑源县| 弥勒县| 苏尼特右旗| 呈贡县| 漾濞| 辽阳县| 正阳县|