Linux 中的 JQ 命令使用例項

語言: CN / TW / HK

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

如何安裝JQ​ ​命令​

在​ ​Centos​ ​8中使用下面命令安裝​ ​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 命令和“.”來組織這些資料,使用​ ​.​ ​來篩選:

www.ccidnet.com/2016/0822/10173006.shtml

www.donews.com/news/detail/4/2970162.html

www.51cto.com/it/news/2020/0113/18299.html

www.donews.com/news/detail/4/2971720.html

[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 檔案中僅查詢和列印所需的資料。