Go 每日一库之 gojsonq

Gojsonq是一个简洁的库,用于方便地处理JSON数据。它支持从字符串、文件和Reader读取JSON,提供类似SQL的查询能力,包括字段映射、条件查询、聚合统计等。使用Gojsonq,可以简化对深层嵌套JSON的访问,如通过`.`操作符读取值,以及通过`Where`、`Limit`和`Offset`进行分页和条件筛选。
摘要由CSDN通过智能技术生成

简介

在日常工作中,每一名开发者,不管是前端还是后端,都经常使用 JSON。JSON 是一个很简单的数据交换格式。相比于 XML,它灵活、轻巧、使用方便。JSON 也是RESTful API推荐的格式。有时,我们只想读取 JSON 中的某一些字段。如果自己手动解析、一层一层读取,这就变得异常繁琐了。特别是在嵌套层次很深的情况下。今天我们介绍gojsonq。它可以帮助我们很方便的操作 JSON。

快速使用

先安装:

$ go get github.com/thedevsaddam/gojsonq

后使用:

package main

import (
  "fmt"

  "github.com/thedevsaddam/gojsonq"
)

func main() {
  content := `{
  "user": {
    "name": "dj",
    "age": 18,
    "address": {
      "provice": "shanghai",
      "district": "xuhui"
    },
    "hobbies":["chess", "programming", "game"]
  }
}`

  gq := gojsonq.New().FromString(content)
  district := gq.Find("user.address.district")
  fmt.Println(district)

  gq.Reset()

  hobby := gq.Find("user.hobbies.[0]")
  fmt.Println(hobby)
}

操作非常简单:

  • 首先调用gojsonq.New()创建一个JSONQ的对象;
  • 然后就可以使用该类型的方法来查询属性了。

上面代码我们直接读取位于最内层的district值和hobbies数组的第一个元素!层与层之间用.隔开,如果是数组,则在属性字段后通过.[index]读取下标为index的元素。这种方式可以实现很灵活的读取。

注意到一个细节:在查询之后,我们手动调用了一次Reset()方法。因为JSONQ对象在调用Find方法时,内部会记录当前的节点,下一个查询会从上次查找的节点开始。也就是说如果我们注释掉jq.Reset(),第二个Find()方法实际上查找的是user.address.district.user.hobbies.[0],自然就返回nil了。除此之外,gojsonq也提供了另外一种方式。如果你想要保存当前查询的一些状态信息,可以调用JSONQCopy方法返回一个初始状态下的对象,它们会共用底层的 JSON 字符串和解析后的对象。上面的gq.Reset()可以由下面这行代码代替:

gpCopy := gp.Copy()

后面就可以使用gpCopy查询hobbies了。</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Golang每日一库是一个系列的文章,旨在介绍Golang中的各种优秀的第三方库。其中一篇文章介绍了zap库和logrus库。\[1\]zap库是Golang中性能最高的日志库,而logrus库虽然已经不再维护和更新,但在使用的简易程度方面更好用一些。\[1\]除了这两个库,还有很多其他的日志库可以选择。另外,flag库也是Golang中常用的库之一,用于处理命令行参数。\[2\]\[3\]flag库提供了多种选项类型,包括自定义选项类型和时间间隔类型。自定义选项类型可以根据需求进行定义,而时间间隔类型支持多种格式,如"300ms"、"-1.5h"、"2h45m"等。\[2\]\[3\]这些库都是Golang开发中常用的工具,可以帮助开发者更高效地进行日志记录和命令行参数处理。 #### 引用[.reference_title] - *1* [Golang一日一库之logrus](https://blog.csdn.net/Zuko_chen/article/details/130212672)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Go每日一库之Flag](https://blog.csdn.net/weixin_43999327/article/details/130701461)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值