我想使用 jq 將此陣列附加到此 json 字串。我的結果只添加了 hello 元素
method=1234
arraynew=(hello world)
echo $arraynew
PAYLOAD=$( jq -Rn \
--arg method $method \
--arg array $arraynew \
'{method: [$method], values: $array}' )
我得到這個回報:
{ "method": [ "1234" ], "values": "hello" }
uj5u.com熱心網友回復:
嘗試一下
jq '.[].method = [$method]'
uj5u.com熱心網友回復:
參考類似的陣列$arraynew等效于${arraynew[0]}- 您只能獲得第一個元素。
jq預計--arg值是字串,所以我們需要加入陣列成一個字串,然后JQ內把它拆分:
jq -n \
--arg method "$method" \
--arg array "$(printf '%s\n' "${arraynew[@]}")" \
'
{
method: [$method],
values: ($array | split("\n"))
}
'
{
"method": [
"1234"
],
"values": [
"hello",
"world"
]
}
uj5u.com熱心網友回復:
首先,使用以下命令將 bash 陣列轉換為 json 陣列 jq
printf '%s\0' "${arraynew[@]}" | jq -Rns 'input | split("\u0000")'
[
"hello",
"world"
]
然后,jq使用--argjson而不是將其匯入到您的主腳本中--arg
jsonarray="$(
printf '%s\0' "${arraynew[@]}" | jq -Rns 'input | split("\u0000")'
)"
jq -Rn \
--arg method "$method" \
--argjson array "$jsonarray" \
'{method: [$method], values: $array}'
{
"method": [
"1234"
],
"values": [
"hello",
"world"
]
}
uj5u.com熱心網友回復:
您可以將陣列元素作為位置引數傳遞:
#!/usr/bin/env bash
method=1234
arraynew=(hello world)
declare -p arraynew
payload=$(
jq -n '{method: $method, values: $ARGS.positional}' \
--arg method "$method" \
--args "${arraynew[@]}"
)
printf '%s\n' "$payload"
但它有系統最大引數行長度的限制,因此只能用于更短的小元素陣列。
或者,您可以將陣列作為null-delimited 元素流傳遞,并將其jq讀入字串以在null分隔符上拆分為 JSON 陣列,如下所示:
#!/usr/bin/env bash
method=1234
arraynew=(hello world)
declare -p arraynew
payload=$(
printf '%s\0' "${arraynew[@]}" |
jq -Rs '{method: $method, values: split("\u0000")}' \
--arg method "$method"
)
printf '%s\n' "$payload"
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/341788.html
下一篇:有沒有辦法查看出站符號鏈接?
