Linux 中的 JQ 命令使用實例

JSON 是一種數據表示格式,用於在應用程序的不同層之間存儲和傳輸數據;它將數據存儲在鍵:值對中。在文章中,我們將學習使用 JQ 命令在 shell 中操作和處理 JSON 數據。

如何安裝 JQ 命令

在 Centos8 中使用下面命令安裝jq

[root@localhost ~]# dnf -y install jq

語    法

現在我們可以開始使用 JQ 命令,因爲它已經成功安裝在我們的系統上,但首先,讓我們看一下 JQ 命令的語法:

jq [options]  [file...]

jq [options] --args  [strings...]

jq [options] --jsonargs  [JSON_TEXTS...]

JQ 命令可以用多種不同的方式使用;它可以直接用於 JSON 文件,也可以結合其他幾個命令來解釋 JSON 數據。JQ 命令可以與不同的過濾器一起使用,例如 “.”、“|”、“,” 或“.[]”過濾器來組織 JSON 數據。

JQ 命令還採用不同的選項作爲參數,例如 --tab、--stream、--indent n、--unbuffered 和 -L 目錄選項。JQ 命令的語法乍一看可能很複雜,但閱讀整篇文章後您就會熟悉它。

如何使用 JQ 命令組織 JSON 數據

JQ 命令過濾器最簡單和常用的特性。它們用於在將 JSON 數據打印到標準輸出時對其進行組織和美化。

在這個例子中,我們有一個名爲 employee.json 的 JSON 文件,我們需要將數據輸出到標準輸出:

{"workers":{"name""John Brooks","id""003"}}

我們可以使用 cat 命令來顯示數據:

[root@localhost ~]# cat employee.json 
{"workers":{"name""John Brooks","id""003"}}

使用 cat 命令打印到標準輸出的數據是無組織和混亂的。我們可以使用 JQ 命令和 “.” 來組織這些數據,使用.來篩選:

[root@localhost ~]# jq '.' employee.json 
{
  "workers"{
    "name""John Brooks",
    "id""003"
  }
}

現在,數據變得更有條理、色彩豐富且更易於理解。從 API 訪問數據時尤其需要此過濾器;API 中存儲的數據可能非常無組織且令人困惑。

如何使用 JQ 命令訪問屬性

.字段過濾器和 JQ 命令可用於訪問 shell 中的對象屬性。

如果我們只想訪問單個屬性並將其打印到標準輸出,那麼我們可以使用.字段運算符。例如,要訪問工人的屬性,我們可以使用以下命令:

[root@localhost ~]# jq '.workers' employee.json 
{
  "name""John Brooks",
  "id""003"
}

我們還可以使用.字段運算符訪問屬性中存在的項目。要訪問工人屬性中的名稱項,我們將使用:

[root@localhost ~]# jq '.workers.name' employee.json 
"John Brooks"

如何使用 JQ 命令訪問數組項

我們還可以使用 .[] 運算符訪問和輸出 JSON 文件中數組中存在的元素。對於這個例子,我們將修改我們的 JSON 文件,添加下面內容:

[{"name""John Brooks","id""003"},{"name""Randy Park","id""053"},{"name""Todd Gray","id""009"}]

查看一下 employee.json 文件:

[root@localhost ~]# cat employee.json 
[{"name""John Brooks","id""003"},{"name""Randy Park","id""053"},{"name""Todd Gray","id""009"}]

要輸出 JSON 文件中存在的所有數組,我們將運行以下命令:

[root@localhost ~]# jq '.[]' employee.json 
{
  "name""John Brooks",
  "id""003"
}
{
  "name""Randy Park",
  "id""053"
}
{
  "name""Todd Gray",
  "id""009"
}

要僅輸出第二個數組,我們可以通過以下方式修改上述命令:

[root@localhost ~]# jq '.[1]' employee.json 
{
  "name""Randy Park",
  "id""053"
}

請記住,數組從索引 0 開始的。

我們還可以使用 .字段 運算符訪問數組中存在的屬性。例如,如果我們想訪問第三個數組中的 name 屬性,那麼我們將運行以下命令:

[root@localhost ~]# jq '.[2].name' employee.json 
"Todd Gray"

類似地,要訪問數組中的所有名稱屬性,我們可以執行以下命令:

[root@localhost ~]# jq '.[].name' employee.json 
"John Brooks"
"Randy Park"
"Todd Gray"

總    結

JQ 命令用於將 JSON 數據轉換爲更易讀的格式並將其打印到 Linux 上的標準輸出。JQ 命令是圍繞過濾器構建的,過濾器用於從 JSON 文件中僅查找和打印所需的數據。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/EM3H7GoJ1k-SpCV40TmHMA