700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【GoCN酷Go推荐】GJSON的使用

【GoCN酷Go推荐】GJSON的使用

时间:2023-11-01 10:33:32

相关推荐

【GoCN酷Go推荐】GJSON的使用

初心

用最少的口水话把一个库,一个框架的用法讲清楚,这才是酷go最有价值的地方。

丫的就是一社畜,哥老倌儿,你不要在我面前说源码,你把k8s全部读了,docker也读了,你就跑来问我懂不懂,我不要听,不要听...

我就是个码农,需要的是咋个用会你说的那些东西,需要知道那是个啥子玩意儿,你开口就是源码,我用都没用过听你讲啥子玩意儿哟~

能不能给我一个Zone,直接给我讲用法,不要口水话多,抽象聊原理,我又不好意思去问百度,那些人把一个人工智能都能吹成妖魔鬼怪,我看了几万字,就总结了一句话:人工智能就是大量数据的存储,从而利用各种计算规则得出结果。

酷go到底得不得行嘛,那肯定阔以满足各位码农(社畜)嘞需求噻,这里边儿莫得口水话,撸起裤子就是...噢不...撸起袖子直接干代码的粗人,这里边儿莫得那么多原理,喜欢看原理的都在最后放了github开源源码,爱看不看~

酷go里边儿你可以遇到很多你喜欢的偶像,beego创始人,BAT的大佬等。

Golang | Gjson库

简介 什么是Gjson:

GJSON是一个Golang包,它提供了一种快速,简单的方法来从json格式文档中获取值。它拥有比如单行检索,用"."符号来寻找路径,迭代和解析多行json的功能。

个人理解

Gjson实际上就是一个比原生json解析更快更简单的一种工具,对于API来说,我不关心这个json格式是否有错,我只需要关心这个json里面有没有我想要的数据,快速格式化成我想要的格式

安装

GO MOD模式下,执行:

$goget-/tidwall/gjson

直接获取值

我还是会由浅入深的给大家介绍这个库的使用方法,如果我们拿到了一个json字符串的时候应该这样做:

packagemainimport("fmt""/tidwall/gjson")funcmain(){exampleJsonString:=`{"code":"000","data":{"all_count":441353,"lists":[{"id":441353,"job_name":"经营日报-同步职位信息","job_recall_time":"-03-1315:05:04","job_recall_content":"请求成功:great","create_time":"-03-1315:05:04"},{"id":441352,"job_name":"经营日报-Check张继学列表","job_recall_time":"-03-1315:05:00","job_recall_content":"请求成功:OK","create_time":"-03-1315:05:00"}]},"msg":"获取列表成功","success":true}`jsonCode:=gjson.Get(exampleJsonString,"code")//这个后面你可以继续跟想要的结果类型,不加的话会是json字符串的类型fmt.Println(jsonCode)//结果000jsonOneJobName:=gjson.Get(exampleJsonString,"data.lists.#.job_name").Array()//比如我这里就希望返回是一个切片类型fmt.Println(jsonOneJobName)//结果[经营日报-同步职位信息经营日报-Check张继学列表]}

上面的同学开始疑问了,如果我自己写错了怎么办,或者没有那个key字段怎么办,没关系,你在获取到了后,加上自己想要的判断类型,再判断一次是否为空即可。

我都不需要定义任何结构体,用最简单的办法获取到我想要的内容

路径语法的快速概述:

路径语法的快速概述,以上面json字符串为例

还有一些路径通配符,比如你有模糊查询或者想在json取值时有判断的需求,可查看官方文档:/tidwall/gjson

返回函数

列举一些常用的返回函数使用

packagemain//...//...fmt.Println(gjson.Get(exampleJsonString,"data.lists.1.create_time").Exists())//查看当前路径的值是否存在结果truefmt.Println(gjson.Get(exampleJsonString,"data.lists").IsArray())//查看当前路径是否是json数组结果truefmt.Println(gjson.Get(exampleJsonString,"data.lists.0").IsObject())//查看当前路径是否是一个json对象结果truegjson.Get(exampleJsonString,"data.lists.1").ForEach(func(key,valuegjson.Result)bool{fmt.Println(value)returntrue})//获取到路径结果后,遍历取值(其实觉得自己遍历可读性更高)fmt.Println(gjson.Get(exampleJsonString,"data.lists.1.id").Float())//所有标准类型都可以获取到,比如Bool,Int,Value(这个是接口类型),Unit,String

直接解析bytes类型

实际上,很多时候我们拿到的JSON数据都是从API中获得,比如从http请求中获得了body,之后ioutil.ReadAll获得了[]byte类型的数据

packagemainimport("fmt""/tidwall/gjson")funcmain(){exampleJsonByte:=[]byte(`{"code":"000","data":{"all_count":441353,"lists":[{"id":441353,"job_name":"经营日报-同步职位信息","job_recall_time":"-03-1315:05:04","job_recall_content":"请求成功:great","create_time":"-03-1315:05:04"},{"id":441352,"job_name":"经营日报-Check张继学列表","job_recall_time":"-03-1315:05:00","job_recall_content":"请求成功:OK","create_time":"-03-1315:05:00"}]},"msg":"获取列表成功","success":true}`)fmt.Println(gjson.GetBytes(exampleJsonByte,"data.lists.#.job_name").Array())//好吧,结果一样[经营日报-同步职位信息经营日报-Check张继学列表]}

总结

GJSON真的太简单了,可以说是小白golang解析json数据的必备良品,如果涉及到多人开发,需要用到同样的接口结构体,我建议还是老老实实的写结构体,毕竟数据模型的搭建是多人协同开发基础之一。

还想了解更多吗?

更多请查看:/tidwall/gjson

欢迎加入我们GOLANG中国社区:https://gocn.vip/

《酷Go推荐》招募:

各位Gopher同学,最近我们社区打算推出一个类似GoCN每日新闻的新栏目《酷Go推荐》,主要是每周推荐一个库或者好的项目,然后写一点这个库使用方法或者优点之类的,这样可以真正的帮助到大家能够学习到新的库,并且知道怎么用。

大概规则和每日新闻类似,如果报名人多的话每个人一个月轮到一次,欢迎大家报名啊

点击阅读原文即刻报名

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。