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

提交評論