Golang一日一库之gjson

news/发布时间2024/5/10 15:26:20

官网

https://github.com/tidwall/gjson

一 简介

gjson实际上是get + json的缩写,用于读取 JSON 串

二 使用

1.安装

go get github.com/tidwall/gjson

2.使用

package mainimport ("fmt""github.com/tidwall/gjson"
)func main() {json := `{"name":{"first":"li","last":"dj"},"age":18}`lastName := gjson.Get(json, "name.last")fmt.Println("last name:", lastName.String())age := gjson.Get(json, "age")fmt.Println("age:", age.Int())
}

只需要传入 JSON 串和要读取的键路径即可。注意一点细节,因为gjson.Get()函数实际上返回的是gjson.Result类型,我们要调用其相应的方法进行转换对应的类型。如上面的String()和Int()方法。
如果是直接打印输出,其实可以省略String(),fmt包的大部分函数都可以对实现fmt.Stringer接口的类型调用String()方法。

3. 遍历

gjson.Get()方法返回一个gjson.Result类型的对象,json.Result提供了ForEach()方法用于遍历。该方法接受一个类型为func (key, value gjson.Result) bool的回调函数。遍历对象时key和value分别为对象的键和值;遍历数组时,value为数组元素,key为空(不是索引)。回调返回false时,遍历停止。

const json = `
{"name":"dj","age":18,"pets": ["cat", "dog"],"contact": {"phone": "123456789","email": "dj@example.com"}
}`func main() {pets := gjson.Get(json, "pets")pets.ForEach(func(_, pet gjson.Result) bool {fmt.Println(pet)return true})contact := gjson.Get(json, "contact")contact.ForEach(func(key, value gjson.Result) bool {fmt.Println(key, value)return true})
}

4.一次性获得多个值

调用gjson.Get()一次只能读取一个值,多次调用又比较麻烦,gjson提供了GetMany()可以一次读取多个值,返回一个数组[]gjson.Result。

const json = `
{"name":"dj","age":18,"pets": ["cat", "dog"],"contact": {"phone": "123456789","email": "dj@example.com"}
}`func main() {results := gjson.GetMany(json, "name", "age", "pets.#", "contact.phone")for _, result := range results {fmt.Println(result)}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/57728104.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

第一次Blog

前言 第一次题目集是对类的设计,类与对象的使用和类与数组关联类的考察。第二次题目集是类与对象之间的创建以及运用的考察。第三次题目集是对类的封装性以及Java自带时间包的运用的考察。总而言之,三次题目集的题目量并不算大,题目集的难度也是比较中等。设计与分析这是答题…

记录Windows failed fast startup with error status 0xC00000D4.

1、电脑经常性卡死,查看event viewer 发现启动时一些error 不知道啥原因 看到https://answers.microsoft.com/en-us/windows/forum/windows8_1-performance/faststartup-issues-kernel-power-boot-and/69cc4b65-f847-4f4b-a0a0-b73f469a1ddf 这里说删除%windir%/prefetch文件夹…

通用数据湖仓一体架构正当时

这篇博文中提出的建议并不新鲜。事实上许多组织已经投入了数年时间和昂贵的数据工程团队的工作,以慢慢构建这种架构的某个版本。我知道这一点,因为我以前在Uber和LinkedIn做过这样的工程师。我还与数百个组织合作,在开源社区中构建它并朝着类似的目标迈进。 早在 2011 年 Li…

[转帖]Oracle 败了、谷歌赢了:Java API 版权案最终裁决

https://zhuanlan.zhihu.com/p/362496136 周一,最高法院在Oracle围绕移动操作系统Android中所用软件的一起旷日持久的版权诉讼中判谷歌胜诉。 法院的判决为6比2。大法官Amy Coney Barrett没有参与此案。 该案涉及谷歌用于构建Android的12000行代码,这些代码是从Sun Microsyst…

Java面试题:请谈谈对ThreadLocal的理解?

ThreadLocal是一种特殊的变量存储机制,它提供了一种方式,可以在每个线程中保存数据,而不会受到其他线程的影响。这种机制在多线程编程中非常有用,因为它允许每个线程拥有自己的数据副本,从而避免了数据竞争和线程之间的干扰,以空间换时间。 在Java中,ThreadLocal的实现主…

产品架构、应用架构、技术架构:软件开发的三个支柱

在软件开发中,产品架构、应用架构和技术架构是三个重要的支柱。它们在不同层次上定义了软件系统的不同方面和组织结构。下面是对这三个概念的简要解释:产品架构(Product Architecture): 产品架构关注的是整个软件产品的结构和组织方式。它定义了软件系统的主要组成部分、模…