我有一個由 gitlab 管道生成的 report.json。看起來像:
{"version":"14.0.4","vulnerabilities":[{"id":"64e69d1185ecc48a1943141dcb6dbd628548e725f7cef70d57403c412321aaa0","category":"secret_detection"....and so on
如果沒有發現漏洞,則“漏洞”:[]。我正在嘗試提出一個 bash 腳本來檢查漏洞長度是否為空。如果不是,則列印漏洞鍵的值。可悲的是,我離腳本天才還很遠,所以這是一場斗爭。在網上搜索解決方案時,我遇到了 jq。似乎 select() 應該完成這項作業。我試過了:
jq "select(.vulnerabilities!= null)" report.json
但它回傳{"version":"14.0.4","vulnerabilities":[{"id":"64e69d1185ecc48a194314...而不是預期"vulnerabilities":[{"id":"64e69d1185ecc48a194314...
和
map(select(.vulnerabilities != null)) report.json
回傳“未找到匹配項”
除了我在 bash 和 JSON 決議方面的 0 經驗之外,您介意指出有什么問題嗎?:)
提前致謝
uj5u.com熱心網友回復:
只需使用.過濾器來識別物件vulnerabilities。
以下是一些案例
$ jq '.vulnerabilities' <<END
heredoc> {"version":"14.0.4","vulnerabilities":[{"id":"64e69d1185ecc48a1943141dcb6dbd628548e725f7cef70d57403c412321aaa0","category":"secret_detection"}]}
heredoc> END
[
{
"id": "64e69d1185ecc48a1943141dcb6dbd628548e725f7cef70d57403c412321aaa0",
"category": "secret_detection"
}
]
如果vulnerabilities為 null,則 jq 將回傳 null
$ jq '.vulnerabilities' <<END
{"version":"14.0.4","vulnerabilities":null}
END
null
然后使用 pipe |,您可以將其更改為您想要的任何輸出。
將 null 更改為 []:
.vulnerabilities | if . == null then [] else . end過濾空陣列:
.vulnerabilities | select(length > 0)
有關 jq 過濾器的更多資訊,您可以閱讀jq 手冊。
uj5u.com熱心網友回復:
首先,請注意,在 JSON 世界中,區分[](空陣列)、值null和缺少值(例如,作為物件中缺少鍵的結果)是很重要的。
在下文中,我假設輸出應該是 .vulnerabilities 的值,如果它不是 `[]',否則什么都不是:
< sample.json jq '
select(.vulnerabilities != []).vulnerabilities
'
如果目標是根據 jq 的回傳碼區分兩種情況,您可以使用 -e 命令列選項。
還有其他檢測條件的方法,例如不使用/dev/null.
uj5u.com熱心網友回復:
- 假設“列印漏洞鍵的值”是指專案
id欄位的值。您可以使用該選項檢索它.id并將其提取到 bash 。-r - 如果陣列不為空,您需要所有“鍵”,請使用
.[]. 如果您只想要一個特定的鍵,比如說第一個,使用從 0 開始的索引來解決它:.[0]。 - 要檢查陣列的長度,有一個專用的
length內置函式。但是,由于您的最終目標是提取,因此您也可以嘗試正確執行此操作,使用運算子抑制潛在的無法訪問錯誤,并使用該選項?讓您的 bash 腳本讀取適當的退出狀態。-e
然后您的 bash 腳本可以包含以下代碼段
if key=$(jq -re '.vulnerabilities[0].id?' report.json)
then
# If the array was not empty, $key contains the first key
echo "There is a vulnerability in key $key."
fi
# or
if keys=$(jq -re '.vulnerabilities[].id?' report.json)
then
# If the array was not empty, $keys contains all the keys
for k in $keys
do echo "There is a vulnerability in key $k."
done
fi
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/443838.html
上一篇:獲取有帖子的用戶
