• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    Go通过SJSON实现动态修改JSON

    发布者: 竹韵9933 | 发布时间: 2025-8-14 11:07| 查看数: 28| 评论数: 0|帖子模式

    在Go语言 json 处理领域,在 json 数据处理中,读取与修改是两个核心需求。前文介绍的 GJSON 解决了灵活读取问题,而
    1. SJSON
    复制代码
    作为其姊妹库,则专注于实现无需结构体定义的 json 动态修改。
    本文将延续对比分析风格,解析 SJSON 的核心价值。

    一、Go 原生 json 修改方式

    Go 原生修改 json 数据,同样需先定义结构体,然后再将 json 数据解析到结构体实例,如:
    1. package main

    2. import (
    3.     "encoding/json"
    4.     "fmt"
    5. )

    6. type Person struct {
    7.     Name string `json:"name"`
    8.     Age  int    `json:"age"`
    9. }

    10. func main() {
    11.     jsonStr := `{"name":"张三","age":25}`

    12.     var person Person
    13.     err := json.Unmarshal([]byte(jsonStr), &person)
    14.     if err != nil {
    15.        fmt.Println("解析错误:", err)
    16.        return
    17.     }

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

    20.     fmt.Println(string(newJson))
    21. }
    复制代码
    二、SJSON 组件


    1、概述

    SJSON 提供通过路径表达式直接修改 json 字符串的能力,与 GJSON 采用相同路径语法,形成读写闭环。
    官网地址:GitHub - tidwall/sjson

    2、安装

    使用 Go 的包管理工具
    1. go get
    复制代码
    安装 SJSON:
    1. go get -u github.com/tidwall/sjson
    复制代码
    三、SJSON核心用法


    1、基础值修改
    1. package main

    2. import (
    3.     "fmt"
    4.     "github.com/tidwall/sjson"
    5. )

    6. func main() {
    7.     jsonStr := `{"name":"张三","age":25}`

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

    10.     fmt.Println(string(newJson))
    11. }
    复制代码
    2、嵌套结构修改
    1. package main

    2. import (
    3.     "fmt"
    4.     "github.com/tidwall/sjson"
    5. )

    6. func main() {
    7.     jsonStr := `{
    8.        "name": "张三",
    9.        "age": 25,
    10.        "hobby": {
    11.           "sing": "只因你太美",
    12.           "dance": "背带裤",
    13.           "rap": "kun",
    14.           "ball": "篮球"
    15.        }`

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

    18.     fmt.Println(string(newJson))
    19. }
    复制代码
    3、数组操作
    1. package main

    2. import (
    3.     "fmt"
    4.     "github.com/tidwall/sjson"
    5. )

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

    8.     // 修改 hobby 数组第4个元素为 play
    9.     newJson, _ := sjson.Set(jsonStr, "hobby.3", "play")

    10.     fmt.Println(string(newJson))

    11.     // 追加 hobby 数组第5个元素为 play
    12.     newJson, _ = sjson.Set(jsonStr, "tags.-1", "play")
    13.     fmt.Println(string(newJson))
    14. }
    复制代码
    4、字段删除
    1. package main

    2. import (
    3.     "fmt"
    4.     "github.com/tidwall/sjson"
    5. )

    6. func main() {
    7.     jsonStr := `{"name":"张三","age":25}`

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

    10.     fmt.Println(string(newJson))
    11. }
    复制代码
    四、SJSON 与原生方案对比


    • SJSON 摆脱结构体定义束缚,保持原始 json 结构完整性,避免修改后丢失未定义字段的问题。
    • SJSON 路径直达修改位置,规避嵌套结构嵌套带来的问题,与 GJSON 组成完整处理链路。
    • SJSON 支持运行时动态路径构建,避免硬编码路径带来的问题。
    到此这篇关于Go通过SJSON实现动态修改JSON的文章就介绍到这了,更多相关Go动态修改JSON内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    来源:互联网
    免责声明:如果侵犯了您的权益,请联系站长(1277306191@qq.com),我们会及时删除侵权内容,谢谢合作!

    最新评论

    浏览过的版块

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表