linux命令下jq的用法

什麼是jq命令

官網下載: https://stedolan.github.io/jq/download/

jq可以對json數據進行分片、過濾、映射和轉換,和sed、awk、grep等命令一樣,都可以讓你輕鬆地把玩文本。它能輕鬆地把你擁有的數據轉換成你期望的格式,而且需要寫的程序通常也比你期望的更加簡短。
jq是用C編寫,沒有運行時依賴,所以幾乎可以運行在任何系統上。預編譯的二進制文件可以直接在Linux、OS X和windows系統上運行,當然在linux和OS X系統你需要賦與其可執行權限;在linux系統中也可以直接用yum安裝。

jq常用在從json中解析出過濾出自己想要的屬性值、格式化json字符串輸出。

jq安裝

centos yum安裝

yum install  jq

Ubuntu可以直接用apt安裝

sudo apt-get install jq

jq命令的格式

jq [options] filter [files]
options:
–version:輸出jq的版本信息並退出
–slurp/-s:讀入整個輸入流到一個數組。
–raw-input/-R:不作爲JSON解析,將每一行的文本作爲字符串輸出到屏幕。
–null-input/ -n:不讀取任何輸入,過濾器運行使用null作爲輸入。一般用作從頭構建JSON數據。
–compact-output /-c:使輸出緊湊,而不是把每一個JSON對象輸出在一行。
–colour-output / -C:打開顏色顯示
–monochrome-output / -M:關閉顏色顯示
–ascii-output /-a:指定輸出格式爲ASCII
–raw-output /-r :如果過濾的結果是一個字符串,那麼直接寫到標準輸出(去掉字符串的引號)

filter:
. : 默認輸出
.foo: 輸出指定屬性,foo代表屬性。
.[foo] :輸出指定數組元素。foo代表數組下標。
.[]:輸出指定數組中全部元素
, :指定多個屬性作爲過濾條件時,用逗號分隔
| : 將指定的數組元素中的某個屬性作爲過濾條件

files:
JOSN格式文件。

從json文件 對象數組中取出一組特定的屬性的值

舉例:
從json文件 對象數組中取出一組特定的屬性的值。

[root@VM_0_14_centos ~]# jq -r '.[].rustc_target_feature' < "./rustc-target-features-optimized.json"
+adx
+sha
+sse2
+avx2
+avx
+sse4.2
+sse4.1
[root@VM_0_14_centos ~]# 

rustc-target-features-optimized.json文件內容:

[
  {
    "rustc_target_feature": "+adx",
    "check_cpu_for_feature": "adx"
  },
  {
    "rustc_target_feature": "+sha",
    "check_cpu_for_feature": null
  },
  {
    "rustc_target_feature": "+sse2",
    "check_cpu_for_feature": "sse2"
  },
  {
    "rustc_target_feature": "+avx2",
    "check_cpu_for_feature": "avx2"
  },
  {
    "rustc_target_feature": "+avx",
    "check_cpu_for_feature": "avx"
  },
  {
    "rustc_target_feature": "+sse4.2",
    "check_cpu_for_feature": "sse4_2"
  },
  {
    "rustc_target_feature": "+sse4.1",
    "check_cpu_for_feature": "sse4_1"
  }
]

在shell 腳本 中,我們可以執行結果 複製給某個變量。例如:

optimized_release_rustc_target_features=$(jq -r '.[].rustc_target_feature' < "./rustc-target-features-optimized.json")

它的結果如下,就是你的jq執行結果字符串,使用單引號括起來。

optimized_release_rustc_target_features='+adx
+sha
+sse2
+avx2
+avx
sse4.2
+sse4.1'

從json文件 對象數組中取出一組特定的屬性的值,並排除null值

舉例: 從json文件 對象數組中取出一組特定的屬性的值,並排除值是null的

如下,json還是剛纔的json文件,我們這次取的是 check_cpu_for_feature 屬性的值 通過 | select(. != null)’ 排除了一個值爲null值。

cpu_features_required_for_optimized_release=$(jq -r '.[].check_cpu_for_feature | select(. != null)' < "./rustc-target-features-optimized.json")

結果如下:

cpu_features_required_for_optimized_release='adx
sse2
avx2
avx
sse4_2
sse4_1'

格式化輸出json 字符串

[root@VM_0_14_centos ~]# echo '{"name":"she","age":20}' |jq
{
  "name": "she",
  "age": 20
}
[root@VM_0_14_centos ~]# 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章