




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业保安合同协议书
- 吉他合同协议书
- 委托签合同协议书
- 后勤合同协议书
- 备案合同金额协议书
- 特产买卖合同协议书
- 公寓楼合伙人合同协议书
- 购车合同协议书范文模板
- 承包协议书合同
- 买家协议书合同
- 《公路桥梁施工监控技术规程》(JTGT3650-01-2022)
- 上交所金桥数据中心用户手册
- 胸腔积液考试试题
- 冲压模具成本分析表(模板)
- 2024雇主品牌调研中国大陆区报告-任仕达-202406
- 医科大学医院安保服务采购项目保安服务实施方案
- 2024年连云港专业技术人员继续教育《饮食、运动和健康的关系》92分(试卷)
- MOOC 寄生虫病与食品安全-华中科技大学 中国大学慕课答案
- MOOC 化学与社会-大连理工大学 中国大学慕课答案
- JJG 692-2010无创自动测量血压计
- 儿童及青少年知情同意书版本
评论
0/150
提交评论