我在命令列腳本中有以下代碼:
output_json=$(jq -n \
--argjson ID "${id}" \
--arg Title "${title}" \
--argjson like "\"${like}\"" \
'$ARGS.named')
我將id,title和like變數放入jq. 我得到以下輸出:
[
{
"ID": 6,
"Title": "ABC",
"like": ""
},
{
"ID": 22,
"Title": "ABC",
"like": "Yes"
}
]
但是,我正在嘗試以以下格式獲取輸出,即使用 null:
[
{
"ID": 6,
"Title": "ABC",
"like": null
},
{
"ID": 22,
"Title": "ABC",
"like": "Yes"
}
]
我不太明白一般來說可以這樣做,還是我的jq命令有問題?
和據我了解"like": ""是不一樣的"like": null。我現在也有點困惑,不太明白什么是正確的選擇。
uj5u.com熱心網友回復:
通過使用--argjson,您需要提供有效的 JSON 編碼引數,因此如果您想接收null該值,則需要為null. 但是,您的解決方案會在其周圍添加引號,因此永遠無法將其評估為null. (此外,如果它遵循特殊字符(例如引號字符本身)的 JSON 編碼,它將是一個有效的 JSON 字串。
如果您想在常規情況下有一個 JSON 字串,并且null在它為空的情況下,${like}使用和不使用額外引號將內容作為字串匯入--arg(就像您使用 一樣${title}),然后使用一些jq邏輯將其變為空串成null. 一個if陳述句會做,例如:
like=
jq -n --arg like "${like}" '{like: (if $like == "" then null else $like end)}'
{
"like": null
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/476682.html
