jq
一個靈活的輕量級命令行JSON處理器
補充說明
jq 是 stedolan 開發的一個輕量級的和靈活的命令行JSON處理器,源碼請參考 jq 項目主頁
jq 用於處理JSON輸入,將給定過濾器應用於其JSON文本輸入並在標準輸出上將過濾器的結果生成爲JSON。
最簡單的過濾器是.,它將jq的輸入未經修改地複製到其輸出中(格式設置除外)。
請注意,jq 當前僅支持64位雙精度浮點數(IEEE754)。
安裝
1# Debian系,如 Ubuntu
2sudo apt-get install jq
3
4# RedHat系, 如 CentOS
5yum install jq
語法
1jq [options] <jq filter> [file...]
2jq [options] --args <jq filter> [strings...]
3jq [options] --jsonargs <jq filter> [JSON_TEXTS...]
選項
 1-c               緊湊而不是漂亮的輸出;
 2-n               使用`null`作爲單個輸入值;
 3-e               根據輸出設置退出狀態代碼;
 4-s               將所有輸入讀取(吸取)到數組中;應用過濾器;
 5-r               輸出原始字符串,而不是JSON文本;
 6-R               讀取原始字符串,而不是JSON文本;
 7-C               爲JSON着色;
 8-M               單色(不要爲JSON着色);
 9-S               在輸出上排序對象的鍵;
10--tab            使用製表符進行縮進;
11--arg a v        將變量$a設置爲value<v>;
12--argjson a v    將變量$a設置爲JSON value<v>;
13--slurpfile a f  將變量$a設置爲從<f>讀取的JSON文本數組;
14--rawfile a f    將變量$a設置爲包含<f>內容的字符串;
15--args           其餘參數是字符串參數,而不是文件;
16--jsonargs       其餘的參數是JSON參數,而不是文件;
17--               終止參數處理;
例子
.: 以漂亮的方式輸出
1$ echo '{ "foo": { "bar": { "baz": 123 } } }' | jq '.'
2{
3  "foo": {
4    "bar": {
5      "baz": 123
6    }
7  }
8}
.foo, .foo.bar, .foo?: 獲取一個鍵的值
1$ echo '{"foo": 42, "bar": "less interesting data"}' | jq '.foo'
242
.[], .[]?, .[2], .[10:15]: 數組運算
1$ echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.[1]'
2{
3  "name": "XML",
4  "good": false
5}
[], {}: 構造一個數組/對象
 1$ echo '{"user":"stedolan","titles":["JQ Primer", "More JQ"]}' | jq '{user, title: .titles[]}'
 2
 3{
 4  "user": "stedolan",
 5  "title": "JQ Primer"
 6}
 7{
 8  "user": "stedolan",
 9  "title": "More JQ"
10}
length: 計算一個值的長度
1$ echo '[[1,2], "string", {"a":2}, null]' | jq '.[] | length'                                  
22
36
41
50
keys: 取出數組中的鍵
1$ echo '{"abc": 1, "abcd": 2, "Foo": 3}' | jq 'keys'                                        
2[
3  "Foo",
4  "abc",
5  "abcd"
6]
,: 使用多個過濾器
1$ echo '{ "foo": 42, "bar": "something else", "baz": true}' | jq '.foo, .bar' 
242
3"something else"
|: 通過管道將一個過濾器的輸出當做下一個過濾器的輸入
1$ echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.[] | .name'                                                 
2"JSON"
3"XML"
select(foo): 如果foo返回true,則輸入保持不變
1$ echo '[1,5,3,0,7]' | jq 'map(select(. >= 2))'                                                    
2[
3  5,
4  3,
5  7
6]
map(foo): 每個輸入調用過濾器
1$ echo '[1,2,3]' | jq 'map(.+1)'
2[
3  2,
4  3,
5  4
6]
if-then-else-end: 條件判斷
1 $ echo '2' | jq 'if . == 0 then "zero" elif . == 1 then "one" else "many" end'
2
3"many"
\(foo): 在字符串中插入值並進行運算
1$ echo '42' | jq '"The input was \(.), which is one less than \(.+1)"'          
2
3"The input was 42, which is one less than 43"
來源:https://github.com/jaywcjlove/linux-command
       最後修改於: Wednesday, January 31, 2024
    
版權申明:
- 未標註來源的內容皆為原創,未經授權請勿轉載(因轉載後排版往往錯亂、內容不可控、無法持續更新等);
 - 非營利為目的,演繹本博客任何內容,請以'原文出處'或者'參考鏈接'等方式給出本站相關網頁地址(方便讀者)。