Linux jq 命令 JSON 處理指南


簡介

JSON (JavaScript 物件表示法) 是一種流行的資料格式,用於在應用程式之間交換資訊。它輕量級且易於理解。為了高效地處理 JSON 資料,Linux 提供了一個名為 jq 的命令列工具。這個強大的工具使使用者能夠輕鬆地提取、操作和轉換 JSON 資料。使用 jq,使用者可以快速對 JSON 資料執行各種任務,包括過濾、排序和選擇特定欄位。此外,jq 支援各種輸出格式,使其易於與其他命令列工具整合。在本文中,我們將探討 jq 命令及其用於 JSON 處理的各種特性和功能。

jq 的安裝過程

在開始使用 jq 之前,我們需要確保它已安裝在我們的系統上。可以使用 Linux 包管理器安裝 jq。例如,要在 Ubuntu 上安裝 jq,可以使用以下命令:

$ sudo apt-get install jq

完成任何這些安裝方法後,您可以透過執行以下命令來驗證安裝:

$ jq --version

如果 jq 安裝正確,此命令應顯示安裝在系統上的 jq 版本號。

從基本命令開始

示例

$ echo '{"fruit":{"name":"mango","color":"yellow","price":4.20}}' | jq '.'

jq 命令與 "." 過濾器一起使用,用於在控制檯輸出中漂亮地列印 JSON 物件。"." 過濾器只需選擇整個輸入物件並將其返回。

輸出

{
   "fruit": {
      "name": "mango",
      "color": "yellow",
      "price": 4.2
   }
}

安裝和使用 curl 命令

示例

$ sudo apt install curl

安裝後,您可以在終端中執行此命令:

$ curl http://api.open-notify.org/iss-now.json | jq '.'

此命令使用 curl 命令向 URL http://api.open-notify.org/iss-now.json 發出 HTTP GET 請求,該請求返回一個 JSON 物件,其中包含國際空間站 (ISS) 的當前緯度和經度座標。

輸出

% Total    % Received % Xferd   Average Speed    Time    Time     Time      Current
                                 Dload  Upload  Total   Spent     Left       Speed
100   112  100   112    0     0   159      0    --:--:-- --:--:-- --:--:--     159
{
   "message": "success",
   "iss_position": {
      "latitude": "19.4146",
      "longitude": "-3.3218"
   },
   "timestamp": 1678259912
}

建立 JSON 檔案

示例

首先進入桌面

$ cd Desktop/

在桌面上建立一個檔案,檔名是 fruit.json

$ touch fruit.json

在桌面上開啟檔案並輸入以下程式碼。

{
   "fruit": {
      "name": "mango",
      "color": "yellow",
      "price": 4.2
   }
}

輸入此程式碼後儲存程式碼,然後返回終端並執行以下命令:

$ cat fruit.json

輸出

{
   "fruit": {
      "name": "mango",
      "color": "yellow",
      "price": 4.2
   }
}

訪問 JSON 檔案屬性的不同方法

示例

現在我們嘗試將屬性值連結在一起以訪問巢狀物件,這是一個示例:

$ jq '.fruit.name' fruit.json
"mango"

我們使用逗號分隔它們來從 JSON 物件中檢索多個鍵,這是一個示例:

$ jq '.fruit.color,.fruit.price' fruit.json
"yellow"
4.2

列印陣列中的每個元素

這是陣列的基本格式。

$ echo '["Aditya","Adil","Arindom"]' | jq '.[]'

輸出

"Aditya"
"Adil"
"Arindom"

在桌面上建立一個新的 JSON 檔案

在桌面上建立檔案,檔名是 fruits.json

$ touch fruits.json

現在在桌面上開啟新檔案,然後複製貼上以下程式碼。

[
   {
      "name": "Mango",
      "color": "yellow",
      "price": 4.2
   },
   {
      "name": "Grave",
      "color": "green",
      "price": 2.5
   },
   {
      "name": "Blueberry",
      "color": "blue",
      "price": 1.25
   }
]

之後儲存檔案,再次返回終端並執行此程式碼。

列印陣列中每個物件中的所有水果名稱

示例

$ jq '.[].name' fruits.json

[] 運算子用於迭代陣列的每個元素,| 運算子用於將多個過濾器連結在一起。第一個過濾器 .[] 選擇陣列的每個元素,第二個過濾器 .name 選擇從每個選定元素中選擇的 "name" 鍵的值。

輸出

"Mango"
"Grave"
"Blueberry"

按索引訪問價格

示例

$ jq '.[1].price' fruits.json

陣列索引從 0 開始,芒果是第 0 個索引,葡萄是第 1 個索引,藍莓是第 2 個索引。

在此命令中,我們嘗試列印第一個索引,即葡萄的價格。

輸出

2.5

使用 jq 命令切片陣列

示例

jq 中的切片是指根據其索引或鍵選擇陣列或物件中的元素子集。

$ echo '[10,12,14,16,18,20,22,24,26,28,30]' | jq '.[4:8]'

輸出

[
   18,
   20,
   22,
   24
]

在您提供的示例中,切片 .[4:8] 選擇索引為 4, 5, 6 和 7 的元素,但不包括索引為 8 的元素。

從陣列中查詢最大值和最小值

如果我們需要確定輸入陣列中最小的或最大的元素,我們可以使用 min 和 max 函式

示例

查詢最小值:

$ jq '[.[].price] | min' fruits.json

輸出

1.25

使用 select 函式

select 函式是我們可用於 JSON 查詢的另一個有用工具。

示例

$ jq '.[] | select(.color=="yellow" and .price>=4.2)' fruits.json

輸出

{
   "name": "Mango",
   "color": "yellow",
   "price": 4.2
}

從 JSON 中刪除鍵

有時,我們可能需要從 JSON 物件中消除鍵值對。

示例

$ jq 'del(.fruit.color)' fruit.json

輸出

{
   "fruit": {
      "name": "mango",
      "price": 4.2
   }
}

結論

Linux jq 命令是在命令列上處理 JSON 資料的重要工具。在本文中,我們提供了一個關於 jq 命令 JSON 處理的指南,包括如何安裝它,如何將其用於基本操作。我們還提供瞭如何使用 jq 命令處理 JSON 資料的示例,以及程式碼和輸出。

更新於:2023年3月29日

瀏覽量 11K+

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.