go语言搬砖之gojmespath实现查询json数据_第1页
go语言搬砖之gojmespath实现查询json数据_第2页
go语言搬砖之gojmespath实现查询json数据_第3页
go语言搬砖之gojmespath实现查询json数据_第4页
go语言搬砖之gojmespath实现查询json数据_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第go语言搬砖之gojmespath实现查询json数据目录简介例子小结

简介

go-jmespath是用Go语言实现jmespath的一个库,jmespath是json的查询语言,所以在Go中利用go-jmespath可以做到查询json的作用

go-jmespath官网:/jmespath/go-jmespath

jmespath官网:/

jmespath学习:/tutorial.html

go-jmespath和linux系统jq命令功能非常相似,让Go处理json数据更加方便

例子

以下例子来源来go-jmespath官方文档和jmespath官网的学习文档总结

packagemain

import(

"encoding/json"

"fmt"

"/jmespath/go-jmespath"

funcmain(){

//基本查询

varjsonData=[]byte(`{"foo":{"bar":{"baz":[0,1,2,3,4]}}}`)

vardatainterface{}

err:=json.Unmarshal(jsonData,data)

iferr!=nil{

fmt.Println(err)

re1,_:=jmespath.Search("foo.bar",data)

fmt.Println("data查询结果:",re1)

re2,_:=jmespath.Search("foo.bar.baz[2]",data)

fmt.Println("data查询结果:",re2)

//通配符查询

varjsonData2=[]byte(`{"foo":[{"first":"a","last":"b"},

{"first":"c","last":"d"}]}`)

vardata2interface{}

_=json.Unmarshal(jsonData2,data2)

re3,_:=jmespath.Search("foo[*].first",data2)

fmt.Println("data2查询结果:",re3)

re4,_:=jmespath.Search("foo[:1].first",data2)

fmt.Println("data2查询结果:",re4)

//运算符查询

varjsonData3=[]byte(`{"foo":[{"age":20},{"age":25},

{"age":30},{"age":35},

{"age":40}]}`)

vardata3interface{}

_=json.Unmarshal(jsonData3,data3)

re5,_:=jmespath.Search("foo[age`30`]",data3)

fmt.Println("data3查询结果:",re5)

//过滤查询

varjsonData4=[]byte(`{

"machines":[

{"name":"a","state":"running"},

{"name":"b","state":"stopped"},

{"name":"b","state":"running"}]

vardata4interface{}

_=json.Unmarshal(jsonData4,data4)

re6,_:=jmespath.Search("machines[state=='running'].name",data4)

fmt.Println("data4查询结果:",re6)

//管道查询

varjsonData5=[]byte(`{

"people":[

{"first":"James","last":"d"},

{"first":"Jacob","last":"e"},

{"first":"Jayden","last":"f"},

{"missing":"different"}

"foo":{"bar":"baz"}

vardata5interface{}

_=json.Unmarshal(jsonData5,data5)

re7,_:=jmespath.Search("people[*].first|[0]",data5)

fmt.Println("data5查询结果:",re7)

//多选查询并带自定义名称

varjsonData6=[]byte(`{

"people":[

"name":"a",

"state":{"name":"up"}

"name":"b",

"state":{"name":"down"}

"name":"c",

"state":{"name":"up"}

vardata6interface{}

_=json.Unmarshal(jsonData6,data6)

re8,_:=jmespath.Search("people[].{Name:name,State:}",data6)

fmt.Println("data6查询结果:",re8)

//函数

varjsonData7=[]byte(`{

"people":[

"name":"b",

"age":30,

"state":{"name":"up"}

"name":"a",

"age":50,

"state":{"name":"down"}

"name":"c",

"age":40,

"state":{"name":"up"}

vardata7interface{}

_=json.Unmarshal(jsonData7,data7)

re9,_:=jmespath.Search("length(people)",data7)

fmt.Println("data7查询结果:",re9)

re10,_:=jmespath.Search("max_by(people,age).name",data7)

fmt.Println("data7查询结果:",re10)

小结

上述例子演示了7种不同方式的查询,基本能覆盖日常json查询的需求了

go-jmespath包完全模拟了jmespath

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论