shell學習(12)- jq


jq命令允許直接在命令行下對JSON進行操作,包括分片、過濾、轉換等 ,jq是用C編寫,沒有運行時依賴,所以幾乎可以運行在任何系統上。預編譯的二進制文件可以直接在Linux、OS X和windows系統上運行,當然在linux和OS X系統你需要賦與其可執行權限;在linux系統中也可以直接用yum安裝。

下載地址 https://stedolan.github.io/jq/download/

本文主要介紹其使用,默認是已經安裝好的,沒有安裝的,請自行安裝。

現在先准備json串,如下kumufengchun.json:

{"name":"kumufengchun","age":"18","city":"beijing","email":"kumufengchun@gmail.com","date":"Thursday","country":"China","company":["baidu","google","alibaba"]}"

如下test.json:

[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]

 

1.用jq .直接查看

jq . kumufengchun.json 

或者

 cat kumufengchun.json | jq .

輸出如下:

[root@localhost ~]$ cat kumufengchun.json | jq .
{
  "name": "kumufengchun",
  "age": "18",
  "city": "beijing",
  "email": "kumufengchun@gmail.com",
  "date": "Thursday",
  "country": "China",
  "company": [
    "baidu",
    "google",
    "alibaba"
  ]
}

是已經格式化的json數據串,在linux系統下還高光顯示,key和value用不同的顏色表示,如下圖:

 

2.輸出某個字段或者某個索引的值

語法:jq  '.<key>'  ,這里key是字段名稱

[root@localhost ~]$ jq .name kumufengchun.json 
"kumufengchun"

[root@localhost ~]$ jq '.name' kumufengchun.json 
"kumufengchun"

[root@localhost ~]$ jq '.company' kumufengchun.json 
[
"baidu",
"google",
"alibaba"
]

 

3.輸出數組的值

語法:jq '.[<value>]' ,這里value是數組的索引整數值

[root@localhost ~]$ jq '.company[1]' kumufengchun.json 
"google"

[root@localhost ~]$ jq '.company[2]' kumufengchun.json 
"alibaba"

 

4.輸出列表、數組的一部分,對其進行切片

語法:jq '.<list-key>[s:e]',返回的是數組或者列表的index從s開始(包括s)到e結束(不包括e)

[root@localhost ~]$ jq '.company[0:2]' kumufengchun.json 
[
  "baidu",
  "google"
]

也可以省略開始的index,只有結束的index,如下,仍然是不包括結束index的值:

[root@localhost ~]$ jq '.company[:3]' kumufengchun.json 
[
  "baidu",
  "google",
  "alibaba"
]

也可以省略結束的index,只有開始的index,如下,輸出到最后:

[root@localhost ~]$ jq '.company[1:]' kumufengchun.json 
[
  "google",
  "alibaba"
]

開始的索引也可以是負數,表示從后邊倒着數,從-1開始數:

[root@localhost ~]$ jq '.company[-2:]' kumufengchun.json 
[
  "google",
  "alibaba"
]

 

5.循環輸出所有的值,如數組嵌套

語法:jq '.[]'

[root@localhost ~]$ jq '.[]' test.json 
{
  "name": "JSON",
  "good": true
}
{
  "name": "XML",
  "good": false
}

[root@localhost ~]$ jq '.[]' kumufengchun.json 
"kumufengchun"
"18"
"beijing"
"kumufengchun@gmail.com"
"Thursday"
"China"
[
  "baidu",
  "google",
  "alibaba"
]

 

6.輸出多個索引的值,可以用逗號分割

語法: jq '.key1,.key2'

[root@localhost ~]$ jq '.name,.age' kumufengchun.json 
"kumufengchun"
"18"
[root@localhost ~]$ jq '.date,.company[]' kumufengchun.json 
"Thursday"
"baidu"
"google"
"alibaba"

如果是數組,用中括號括起來要輸出的鍵值,鍵值先寫誰,先輸出誰

[root@localhost ~]$ jq '.company[2,0]' kumufengchun.json 
"alibaba"
"baidu"

 

7.用管道符號|可以對其進行再次處理

語法:jq .[] | .<key1>

[root@localhost ~]$ jq '.[]|.name' test.json 
"JSON"
"XML"

 

8.括號的作用

[root@localhost ~]$ echo 1 | jq '(.+2)*5' 
15
[root@localhost ~]$ echo {1,2,3} | jq '(.+2)*5' 
15
20
25

 

9.length求長度,如果是字符串是求的字符串的長度,如果是數組則求得是數組的長度

[root@localhost ~]$ cat kumufengchun.json | jq '.[] | length'
12
2
7
22
8
5
3

 

10.輸出所有的keys

語法: jq keys

[root@localhost ~]$ cat kumufengchun.json | jq 'keys'
[
  "age",
  "city",
  "company",
  "country",
  "date",
  "email",
  "name"
]

輸出數組的keys:

[root@localhost ~]$ cat kumufengchun.json | jq '.company | keys'
[
  0,
  1,
  2
]

 

11.判斷存不存在某個鍵

[root@localhost ~]$ cat kumufengchun.json | jq 'has("email")'
true
[root@localhost ~]$ cat kumufengchun.json | jq 'has("address")'
false

 

更多用法參見文檔 https://stedolan.github.io/jq/manual/#Invokingjq


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM