我正在構建一個 bash 腳本,該腳本將從 API 讀取回應并在 [] 串列(不是 {} 陣列)中插入一個值(如果該值不存在)。來自 API 的虛假示例回應:
#response.json contains:
{
"foods": {
"menu": [
"tacos",
"spaghetti",
"pizza",
"chicken_florentine",
"bacon_cheeseburge",
"chow_mein",
"sushi",
"chocolate",
"whiskey"
]
}
}
我的 bash 腳本中的變數是order="lasagna". 如果'foods.menu[]'包含$order則什么也不做,否則將$order值插入'foods.menu[]'.
order="lasagna"使用當前不存在的bash 變數'foods.menu[]',生成的 json 應該是:
{
"foods": {
"menu": [
"tacos",
"spaghetti",
"pizza",
"chicken_florentine",
"bacon_cheeseburge",
"chow_mein",
"sushi",
"chocolate",
"whiskey",
"lasagna" <----
]
}
}
我從嘗試 bashfor回圈和 jq 的if-then-else,的變體開始select,contains但陷入了困境。任何幫助表示贊賞。
uj5u.com熱心網友回復:
你不需要一個回圈
jq --arg order lasagna '.foods.menu |= if index($order) then . else . [$order] end' response.json
但是您可能需要一個來插入多個訂單
jq 'reduce $ARGS.positional[] as $order (.;
.foods.menu |= if index($order) then . else . [$order] end
)' response.json --args apple banana sushi
uj5u.com熱心網友回復:
我不知道這是否符合任何不言而喻的要求。
無論如何添加專案,然后unique結果:
echo "$result" | jq --arg order pizza '.foods.menu |= (. [$order] | unique)'
{
"foods": {
"menu": [
"bacon_cheeseburge",
"chicken_florentine",
"chocolate",
"chow_mein",
"pizza",
"spaghetti",
"sushi",
"tacos",
"whiskey"
]
}
}
結果陣列被排序。如果輸入中有任何重復項,則這些都消失了。
uj5u.com熱心網友回復:
這是另一種使用替代運算子 默認為專案索引//的陣列的方法:length
jq --arg order 'lasagna' '
(.foods.menu | .[index($order) // length]) = $order
' response.json
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/520091.html
標籤:json重击jq
