安装

go get -u github.com/tidwall/sjson

设置值

import "github.com/tidwall/sjson"const json = `{"name":{"first":"Janet","last":"Prichard"},"age":47}`func main() {//把name.last的值给改变了value, _ := sjson.Set(json, "name.last", "Anderson")println(value)
}

输出

{"name":{"first":"Janet","last":"Anderson"},"age":47}

路径语法

路径是由点分隔的一系列键。点和冒号字符可以转义\

{"name": {"first": "Tom", "last": "Anderson"},"age":37,"children": ["Sara","Alex","Jack"],"fav.movie": "Deer Hunter","friends": [{"first": "James", "last": "Murphy"},{"first": "Roger", "last": "Craig"}]
}
"name.last"          >> "Anderson"
"age"                >> 37
"children.1"         >> "Alex"
"friends.1.last"     >> "Craig"

-1键可用于将值附加到现有数组:

"children.-1"  >> appends a new value to the end of the children array

通常,数字键用于修改数组,但可以使用冒号字符强制数字对象键:

{"users":{"2313":{"name":"Sara"},"7839":{"name":"Andy"}}
}

冒号路径

"users.:2313.name"    >> "Sara"

支持的类型

sjson.Set(`{"key":true}`, "key", nil)
sjson.Set(`{"key":true}`, "key", false)
sjson.Set(`{"key":true}`, "key", 1)
sjson.Set(`{"key":true}`, "key", 10.5)
sjson.Set(`{"key":true}`, "key", "hello")
sjson.Set(`{"key":true}`, "key", map[string]interface{}{"hello":"world"})

输出

{"key":null}
{"key":false}
{"key":1}
{"key":10.5}
{"key":"hello"}
{"key":{"hello":"world"}}

当一个类型无法识别时,SJSON将回退到encoding/jsonMarshaller

从空文档设置一个值

value, _ := sjson.Set("", "name", "Tom")
println(value)// Output:
// {"name":"Tom"}

从空文档设置嵌套值

value, _ := sjson.Set("", "name.last", "Anderson")
println(value)// Output:
// {"name":{"last":"Anderson"}}

设置新值

value, _ := sjson.Set(`{"name":{"last":"Anderson"}}`, "name.first", "Sara")
println(value)// Output:
// {"name":{"first":"Sara","last":"Anderson"}}

更新现有值

value, _ := sjson.Set(`{"name":{"last":"Anderson"}}`, "name.last", "Smith")
println(value)// Output:
// {"name":{"last":"Smith"}}

设置一个新的数组值

value, _ := sjson.Set(`{"friends":["Andy","Carol"]}`, "friends.2", "Sara")
println(value)// Output:
// {"friends":["Andy","Carol","Sara"]

使用-1路径中的键附加数组值

value, _ := sjson.Set(`{"friends":["Andy","Carol"]}`, "friends.-1", "Sara")
println(value)// Output:
// {"friends":["Andy","Carol","Sara"]

附加一个超过结尾的数组值

value, _ := sjson.Set(`{"friends":["Andy","Carol"]}`, "friends.4", "Sara")
println(value)// Output:
// {"friends":["Andy","Carol",null,null,"Sara"]

删除一个值

value, _ := sjson.Delete(`{"name":{"first":"Sara","last":"Anderson"}}`, "name.first")
println(value)// Output:
// {"name":{"last":"Anderson"}}

删除一个数组值

value, _ := sjson.Delete(`{"friends":["Andy","Carol"]}`, "friends.1")
println(value)// Output:
// {"friends":["Andy"]}

删除最后一个数组值

value, _ := sjson.Delete(`{"friends":["Andy","Carol"]}`, "friends.-1")
println(value)// Output:
// {"friends":["Andy"]}

golang中的sjson相关推荐

  1. Golang中Buffer高效拼接字符串以及自定义线程安全Buffer

    本文原创文章,转载注明出处,博客地址 https://segmentfault.com/u/to... 第一时间看后续精彩文章.觉得好的话,顺手分享到朋友圈吧,感谢支持. Go中可以使用"+ ...

  2. 如何在golang中关闭bufio.reader_Golang 并发模型系列:1. 轻松入门流水线模型

    Go语言中文网,致力于每日分享编码.开源等知识,欢迎关注我,会有意想不到的收获! Golang作为一个实用主义的编程语言,非常注重性能,在语言特性上天然支持并发,它有多种并发模型,通过流水线模型系列文 ...

  3. go语言的iota是什么意思_关于Golang中的iota

    快速一览 iota是Golang中提供的一个简化常量和枚举编程的标识符,合理的使用这个标识符可以让代码变得更简洁,省去大量的不必要的代码. 比如下面的这个常量定义 const ( a = 1 b = ...

  4. Golang中的panic和recover(捕获异常)

    Golang中的panic和recover(捕获异常) 参考文章: (1)Golang中的panic和recover(捕获异常) (2)https://www.cnblogs.com/zhzhlong ...

  5. golang 中string和int类型相互转换

    总结了golang中字符串和各种int类型之间的相互转换方式: string转成int: test_int, err := strconv.Atoi(test_string) if err != ni ...

  6. golang中并发sync和channel

    golang中并发sync和channel chenbaoke · 2014-12-08 13:00:01 · 19151 次点击 · 预计阅读时间 5 分钟 · 不到1分钟之前 开始浏览 这是一个创 ...

  7. golang中的sync.WaitGroup

    golang中的sync.WaitGroup Posted on 2015/04/09刚才看golang的sync的包,看见一个很有用的功能.就是WaitGroup. 先说说WaitGroup的用途: ...

  8. 初步解读Golang中的接口相关编写方法

    初步解读Golang中的接口相关编写方法 概述如果说goroutine和channel是Go并发的两大基石,那么接口是Go语言编程中数据类型的关键.在Go语言的实际编程中,几乎所有的数据结构都围绕接口 ...

  9. golang中utf8和汉字互转

    golang中utf8和汉字互转 package mainimport ("fmt""strconv""strings" )func mai ...

最新文章

  1. 常用免费精品Web应用列表(转)
  2. 推荐15款响应式的 jQuery Lightbox 插件
  3. PHP类实例教程(七):析构函数与PHP的垃圾回收
  4. pytorch0.4版的CNN对minist分类
  5. JS编程建议——2:正确辨析JavaScript句法中的词、句和段
  6. 一个人到底申请几张信用卡最合适?
  7. 11-JSP开发模型
  8. const的修饰规则
  9. 在北京如何租房比较好?
  10. 基于Pytorch版yolov5的滑块验证码破解思路
  11. 阿里字体图标库的使用
  12. python技巧积累
  13. Elasticsearch实现内容精确匹配查询
  14. 了解黑客经常使用哪些工具
  15. 5.16 图层合并的几种方式 [原创Ps教程]
  16. malloc与calloc的区别及实例
  17. Android手机屏幕的三种状态
  18. 怎么查看自己的电脑IP地址?
  19. 基于局域网的超简易即时通讯软件(二)
  20. c 实现linux命令wc,实例分析linux常见命令之wc命令用法。

热门文章

  1. 【Android 高性能音频】Oboe 开发流程 ( 包含头 Oboe 头文件 | 创建音频流 | 设置音频流 | 音频流回调类 AudioStreamCallback )
  2. 模板方法及策略设计模式实践
  3. 今日浅谈循环 for与while
  4. Motan的SPI机制实现分析
  5. [C# 设计模式] Adapter - 适配器模式(两种)
  6. docker命令解析
  7. 淘宝旺铺基础版装修出专业版效果(不花钱也一样做到)
  8. [Android]为指定的应用创建桌面快捷方式
  9. 标号的类型是near还是far有什么区别,作用是什么?
  10. Lua table笔记