Shell-Script

用 JQ 解析 JSON

  • July 11, 2021

我正在使用 Bash 在 Linux 機器上執行以下腳本片段。

JSON文件內容:[ { "id": 123456, "firstName": "John", "lastName": "Smith", "email": "user@domain.com" } ]

JSON 文件儲存在通過${data[0]}管道傳輸到 Bash 腳本的數組中。

bash 腳本:

trafficEmployeeId=123456 cat "${data[0]}" | jq --arg employeeId $trafficEmployeeId '.[] | select(.id == $employeeId) | .firstName'

腳本的輸出應該是John. 但我什麼也得不到。

即使您為 shell 變數分配trafficEmployeeId了一個數字,它也會jq作為字元串參數傳遞到腳本中。解決方案是使用jq的函式
將參數解析為數字。 第二個時刻是包含只有一個對象的數組,因此直接使用並應用簡單的運算符條件就足夠了。tonumber
data[0]``.[0]``if

完整的解決方案:

trafficEmployeeId=123456
echo "${data[0]}" | jq --arg employeeId "$trafficEmployeeId" '.[0] 
     | if .id == ($employeeId | tonumber) then .firstName else empty end'

輸出:

"John"

引用自:https://unix.stackexchange.com/questions/399382