GO中`gjson`的应用和分享

本文介绍了GO中的gjson库,用于快速、简便地从JSON文档中获取值。内容包括gjson是什么,JSON的基本概念,gjson库的安装与使用,如简单的数据获取、键路径匹配规则,以及修饰符和自定义修饰符的运用。通过实例演示,帮助读者理解和掌握gjson库的使用方法。
摘要由CSDN通过智能技术生成

GO中gjson的应用和分享

咱们上次分享到使用 GO 爬取静态网页的数据,一起来回顾一下

  • 分享静态网页和动态网页的简要说明
  • GO 爬取静态网页简单数据
  • GO 爬取网页上的图片
  • 并发爬取网页上的资源

要是对 GO 爬取静态数据还有点兴趣的话,欢迎查看文章 分享一波 GO 的爬虫

json 是什么?

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式

它基于 ECMAScript (欧洲计算机协会制定的 JS 规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据

json 有如下几个优势:

  • 层次结构简洁清晰
  • 易于阅读和编写
  • 易于机器解析和生成
  • 能够提升网络传输效率

简单列一下咱们常用的数据序列化的方式

  • json
  • xml

是可扩展标记语言,是一种简单的数据存储语言

  • protobuf

是一种平台无关、语言无关、可扩展且轻便高效的序列化数据结构的协议,可以用于 网络通信 和 数据存储

gjson 是什么?

是 GO 里面的一个库

它主要是提供了一种非常快速简单的方式从json文档中获取相应值

这个 gjson库,实际上是 get + json的缩写,无独有偶,同样的也有sjson库,小伙伴们就知道他代表的含义了吧,是 set + json的意思

gjson 如何使用?

对于 gjson如何使用,XDM,我这里把这个库的基本使用,涉及到的知识点,以及注意事项,给大家梳理梳理

要是想看看 gjson的源码是如何实现高效快速的操作json的,感兴趣的朋友,可以在先会引用的基础上再去详细查看一下源码

本文的分享,围绕如下 4 个方面来实操和梳理 gjson 的使用:

  • gjson 的简单使用
  • gjsonjson
  • gjson 的 修饰符 和 自定义修饰符
  • gjson 键路径的匹配规则

gjson 的简单使用

咱们简单使用一个gjson ,如下编码涉及如下几个点:

  • 设置具体的json 数据
  • **校验 json 数据 **是否合法
  • 一次性获取单个值
  • 一次性获取多个值
package main

import (
   "log"
   "github.com/tidwall/gjson"
)

func main() {
   

   // 设置参数,打印行数
   log.SetFlags(log.Lshortfile | log.LstdFlags)
   
  // 设置 json 数据
   json := `
         {
            "author": {
               "name": "xiaomotong",
               "age": 18,
               "hobby": "writing"
            },
            "extra": "hello wolrd"
            "picList":[{"name":"xiaozhu1"},{"name":"xiaozhu2"}]
         }
         `
   // 校验 json 字符串是否合法
   // 如果不合法的话, gjson 不会报错 panic,可能会拿到一个奇怪值
   if gjson.Valid(json){
   
      log.Println("json valid ...")
   }else{
   
      log.Fatal("json invalid ... ")
   }

   // 获取 author.name 的 值
   aName := gjson.Get(json, "author.name")
   log.Println("aName :", aName.String())

   // 获取 extra 的值
   extra := gjson.Get(json, "extra")
   log.Println("extra:", extra)

   // 获取 一个不存在的 键 对应的 值
   non := gjson.Get(json, "non")
   log.Println("non:", non)


   // 一次性 获取json 的多个键 值
	res := gjson.GetMany(json, "author.age", "author.hobby","picList")
	for i, v := range res{
   
		if i == 0{
   
			log.Println(v.Int())
		}else if i == 2{
   
			for _,vv := range v.Array(){
   
				log.Println("picList.name :",vv.Get("name"))
			}
		}else{
   
			log.Println(v)
		}
	}
}

运行上述代码后,可以看到如下效果:

2021/06/xx xx:32:04 main.go:28: json valid ...
2021/06/xx xx:32:04 main.go:35: aName : xiaomotong
2021/06/xx xx:32:04 main.go:39: extra: hello wolrd
2021/06/xx xx:32:04 main.go:43: non:
2021/06/xx xx:32:04 main.go:50: 18
2021/06/xx xx:32:04 main.go:57: writing
2021/06/xx xx:32:04 main.go:53: picList.name : xiaozhu1
2021/06/xx xx:32:04 main.go:53: picList.name : xiaozhu2

我们需要注意,要把我们的数据源弄对,也就是咱们的json数据必须是合法的,否则,使用gjson 库拿到的数据就不会是咱们期望的值

  • 使用 gjson.Get() ,获取单个值
  • 使用 gjson.GetMany() ,获取多个值
  • 使用gjson.Valid(),判断json数据是否有效

gjsonjson

再来看看 json 行

gjson提供如下语法,来解析json 行 数据:

  • …#

输出 json 行数组的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值