jq常用操作

来源:https://www.cnblogs.com/surpassme/archive/2022/07/26/16523053.html
-Advertisement-
Play Games

1.簡介 jq 是一款非常強大的 JSON 命令行處理工具。其官網地址為:https://stedolan.github.io/jq/ 2.安裝 以CentOS為例: 1.線上安裝 yum install -y epel-release && yum install -y jq 2.離線安裝 訪問官 ...


1.簡介

    jq 是一款非常強大的 JSON 命令行處理工具。其官網地址為:https://stedolan.github.io/jq/

2.安裝

    以CentOS為例:

1.線上安裝

yum install -y epel-release && yum install -y jq

2.離線安裝

  • 訪問官網,並下載jq(Linux 64-bit)
  • 在Linux中執行命令
mv -f /home/surpass/jq-linux64 /usr/bin/jq

3.驗證安裝

# jq -h
Some of the options include:
  -c               compact instead of pretty-printed output;
  -n               use `null` as the single input value;
  -e               set the exit status code based on the output;
  -s               read (slurp) all inputs into an array; apply filter to it;
  -r               output raw strings, not JSON texts;
  -R               read raw strings, not JSON texts;
  -C               colorize JSON;
  -M               monochrome (don't colorize JSON);
  -S               sort keys of objects on output;
  --tab            use tabs for indentation;
  --arg a v        set variable $a to value <v>;
  --argjson a v    set variable $a to JSON value <v>;
  --slurpfile a f  set variable $a to an array of JSON texts read from <f>;
  --rawfile a f    set variable $a to a string consisting of the contents of <f>;
  --args           remaining arguments are string arguments, not files;
  --jsonargs       remaining arguments are JSON arguments, not files;
  --               terminates argument processing;

3.常用參數

  • -h/--help

輸出jq幫助信息

  • -V/--version

輸出jq版本信息

  • -c/--compact-output

將每個JSON對象在單行內以緊湊的形式輸出

  • -n/--null-input

不讀取任何輸入,將null做為輸入運行一次

  • -r/--raw-output

在開啟這個選項的情況下,如果 過濾器 的結果是 string,就會直接寫入標準輸出而不是以 JSON string 的格式輸出。這在 jq 過濾器和其他處理 非-JSON 系統交互時比較有用。

  • -R/--raw-input

不要將輸入解析為JSON。相反,每行文本都以字元串形式傳遞給過濾器

  • -C/--color-output和-M/--monochrome-output

預設情況下,如果是寫入到終端,jq 會輸出 colored JSON 。也可以使用 -C 強制輸出彩色的JSON 到管道或者文件。也可以使用 -M 禁掉輸出 colored JSON 。

  • -S/--sort-keys

將每個 JSON object 的各個欄位按照 key 排序的順序輸出

  • --tab

使用tab符做為縮進符

  • --indent n

指定縮進使用的空格數,範圍為[-1,7]

4.基本過濾器

    在使用過濾器前,先來看看一個示例數據,如下所示:

{
  "personInfo": {
    "name": "Surpass",
    "age": 28,
    "location": "shanghai"
  },
  "others": [
    "a",
    "b",
    "c"
  ]
}
  • 1、.

    最簡單也是最平常的過濾器,其作用是接收輸入並原樣輸出的過濾器

cat test.json | jq .
{
  "personInfo": {
    "name": "Surpass",
    "age": 28,
    "location": "shanghai"
  },
  "others": [
    "a",
    "b",
    "c"
  ]
}
  • 2、.key.key.key'.["key"]'

    獲取指定key的值,如果沒有找到指定的key,則輸出null

# cat test.json | jq .personInfo
{
  "name": "Surpass",
  "age": 28,
  "location": "shanghai"
}

# cat test.json | jq .personInfo.name
"Surpass"

# cat test.json | jq '.["personInfo"]'
{
  "name": "Surpass",
  "age": 28,
  "location": "shanghai"
}
# cat test.json | jq .abc
null
  • 3、.key?

    使用 .key 時,當 . 不是一個數組或對象時會而報錯,使用 .key? 則不會報錯

# echo "1" | jq .a
jq: error (at <stdin>:1): Cannot index number with string "a"
# echo "1" | jq .a?
# 
  • 4、.[index].[startIndex:endIndex]

    獲取對象或value為數組或字元串的子數組或子符串。索引主要有以下幾種形式

  • 索引下標從0開始,
  • 支持負索引,-1表示最後一個元素,-2表示倒數第二個元素
# cat test.json | jq .others[0]
"a"
# cat test.json | jq .others[1:3]
[
  "b",
  "c"
]
# cat test.json | jq .others[-3:-1]
[
  "a",
  "b"
]
# cat test.json | jq .others[:3]
[
  "a",
  "b",
  "c"
]
# echo '[{"name":"Surpass","age":28},{"oters":1234}]' | jq .[0]
{
  "name": "Surpass",
  "age": 28
}
# echo '["Surpass"]' | jq .[0][0:3]
"Sur"
  • 5、.[]

    獲取所有的value值

# cat test.json | jq .[]
{
  "name": "Surpass",
  "age": 28,
  "location": "shanghai"
}
[
  "a",
  "b",
  "c"
]
  • 6、keys

    獲取所有的key對象

# cat test.json | jq keys
[
  "others",
  "personInfo"
]
  • 7、[.[]]

    獲取所有value組成的數組

cat test.json | jq [.[]]
[
  {
    "name": "Surpass",
    "age": 28,
    "location": "shanghai"
  },
  [
    "a",
    "b",
    "c"
  ]
]

  • 8、.[].key

    獲取數組元素中指定key的所有值

# echo '[{"name":"Surpass"},{"name":"Kevin"},{"name":"Tina"}]' | jq .[].name
"Surpass"
"Kevin"
"Tina"

如果需要將輸出結果再次組裝為數組,可以這樣使用 [.[].key]

  • 9、,

    使用多個篩選條件

# cat test.json | jq .personInfo | jq [.name,.age]
[
  "Surpass",
  28
]
  • 10、管道

    可以通過 | 實現管道功能,從而達到對處理的結果進行二次或多次處理

# cat test.json | jq '.personInfo|.name,.age'
"Surpass"
28
# cat test.json | jq '.others|.[2]'
"c"

也可以使用Linux自帶的 | 實現同樣的功能。

  • 11、length

    length 可以獲取字元串或數組的長度

# cat test.json | jq '.others|length'
3
# cat test.json | jq '.personInfo|length'
3
# cat test.json | jq '.personInfo|.name|length'
7
  • 12、map

    可以實現對數組的每一項操作,然後進行合併結果。

# echo '["Surpass","Kevin","Tina"]' | jq 'map(length)'
[
  7,
  5,
  4
]
  • 13、filter(select)

    可以實現對輸入項進行判斷,然後僅返回符合條件的項

# echo '["Surpass","Kevin","Tina"]' | jq 'map(select(.|length>5))'
[
  "Surpass"
]
# echo '["Surpass","Kevin","Tina"]' | jq 'map(select(.|length>=5))'
[
  "Surpass",
  "Kevin"
]
  • 14、\()

    可以實現字元串插值功能

# cat test.json | jq '"Hello \(.personInfo|.name)"'
"Hello Surpass"
# echo '{"name":"Surpass","age":28}' | jq '"age is: \(.age)"'
"age is: 28"
  • 15、+

    可以實現字元串拼接功能

# echo '{"name":"Surpass","age":28}' | jq '"name is :" + .name'
"name is :Surpass"
cat test.json | jq '"name is :" + .personInfo.name '
"name is :Surpass"
  • 16、if/elif/else

    可以使用 if .. then .. elif .. then .. else .. end 實現條件判斷

# echo '[0, 1, 2, 3]' \
> | jq 'map(if . == 0 then "zero" elif . == 1 then "one" elif . == 2 then "two" else "many" end)'
[
  "zero",
  "one",
  "two",
  "many"
]
  • 17、構造 object 或數組

    可以通過 {} 和 [] 構造新的 object 或 數組

  • object:
# echo '["Surpass","Kevin","Tina"]' | jq '{name:.[0]}'
{
  "name": "Surpass"
}

# echo '{"name":"Surpass","ages":[28,29,30]}' | jq '{name,age: .ages[]}'
{
  "name": "Surpass",
  "age": 28
}
{
  "name": "Surpass",
  "age": 29
}
{
  "name": "Surpass",
  "age": 30
}
  • array
# echo '{"name":"Surpass","age":28,"location":"Shanghai"}' | jq '[.name,.age,.location]'
[
  "Surpass",
  28,
  "Shanghai"
]
  • 18、join

    可以進行數組拼接功能。

# echo '["Surpass","28","Shanghai"]' | jq '.|join("--")'
"Surpass--28--Shanghai"
  • 19、split

    可對字元串進行拆分

# echo '"Surpass--28--Shanghai"' | jq 'split("--")'
[
  "Surpass",
  "28",
  "Shanghai"
]

原文地址:https://www.jianshu.com/p/2f58c975b9ca

本文同步在微信訂閱號上發佈,如各位小伙伴們喜歡我的文章,也可以關註我的微信訂閱號:woaitest,或掃描下麵的二維碼添加關註:

作者: Surpassme

來源: http://www.jianshu.com/u/28161b7c9995/

         http://www.cnblogs.com/surpassme/

聲明:本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出 原文鏈接 ,否則保留追究法律責任的權利。如有問題,可發送郵件 聯繫。讓我們尊重原創者版權,共同營造良好的IT朋友圈。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 製作一個用戶頭像選擇器仿 WeGame 製作一個用戶頭像選擇Canvas為父控制項所實現,展示圖片使用Image,Path當作上方的蒙版;Canvas:主要用途方便移動Image,設置ClipToBounds="True"裁剪為一個正方形200x200做為主要展示區域;Image:展示需要裁剪的圖片; ...
  • 由於WPF應用程式出現卡死的情況,特記錄一下問題的跟蹤情況 1、多次進行NAudio事件註冊,沒有啟用註銷再註冊的方式,造成應用程式CPU過高 private AudioNotificationClient audioNotification = new AudioNotificationClien ...
  • 1、機械手頭部相機與龍門架頭部相機的區別? 上篇文字講解了機械手頭部相機標定原理及方法,中間有提到只適用於龍門架,那為什麼呢? 答:龍門架在運動過程中,固定在龍門架上的移動相機相對與龍門架本身只有平移關係,而架在機械手上的相機存在角度旋轉;機械手在運動過程中機械臂J1與機械臂J2兩個的角度一直在變化 ...
  • 我們知道,WPF有兩大特性:1、使用DirectX渲染;2、解析度無關性:WPF使用與設備解析度無關的單位來度量計算顯示界面的像素點,相同大小的情況下,解析度越高,像素點就會越多。因此在WPF中,使用矢量圖(會根據WPF進行縮放,清晰度不變)比點陣圖(固定像素點,縮放會出現鋸齒,並且占用空間大)更合適 ...
  • 一 使用TryParse,而不是Parse 除string外的所有基元類型,都有兩個將string類型轉型為其本身類型的方法:Parse 和 TryParse。 以double類型為例,這兩個方法最簡單的原型為: public static Double Parse(string s); publi ...
  • 1.反轉的體現 控制反轉,即IoC(Invers of Control),它並不是屬於某個特定編程語言的技術,本質上它是設計框架的一種基本思想。ASP.NET Core中的依賴註入其實就是結合了控制反轉的思想所設計出的一套框架。所以為了更好掌握依賴註入,我們就必須先對控制反轉有一個初步的認識。控制反 ...
  • 在Saas系統下多租戶零腳本分表分庫讀寫分離解決方案 ## 介紹 本文ShardinfCore版本x.6.0.20+ 本期主角: - [`ShardingCore`](https://github.com/dotnetcore/sharding-core) 一款ef-core下高性能、輕量級針對分表 ...
  • 佈局(Panel族) WPF佈局使用的是Panel族佈局控制項,它們均派生自Panel抽象類,主要用於控制UI佈局。 WPF佈局容器 WPF常用的佈局容器及使用方法如下: Grid 網格,類似table表格,可靈活設置行列並放置控制項元素,比較常用 Grid的使用思路 - 聲明Grid容器 <Grid> ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...