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