我有以下 JSON
原始資料
{
"myValues": [
{
"filterableValue": "x",
"something": "else"
},
{
"filterableValue": "y",
"another key": "another value"
},
{
"filterableValue": "z"
}
],
"foo": "bar"
}
使用 JQ,我想將一個鍵值對添加到myValues陣列中的第一個(或所有)條目中,它們具有filterableValue=="y". 這些條目在myValues陣列內的位置/索引是任意的。
預期產出
結果應該具有相同的結構(仍然包含foo和myValues),但有一個修改的條目 where filterableValue=="y"。
{
"myValues": [
{
"filterableValue": "x",
"something": "else"
},
{
"filterableValue": "y",
"another key": "another value",
"this": "has been added" // <-- this is the only thing that changed
},
{
"filterableValue": "z"
}
],
"foo": "bar"
}
我的嘗試以及失敗的原因
到目前為止,我設法過濾了相應的陣列條目并在過濾后的輸出上設定了值,但沒有設法保持原始結構并修改過濾后的條目。我的JQ,增加了"this":"has been added"對,但確實不包含原始結構是:
.myValues|map(select(.filterableValue=="y"))[0]|.this="has been added"
jqplay mwe
題
如何修改上述過濾條目并包含原始結構?
uj5u.com熱心網友回復:
將 LHS 上的整個選擇器括在括號內:
(.myValues[] | select(.filterableValue == "y")).this = "has been added"
演示
uj5u.com熱心網友回復:
首先,讓我們清理
.myValues | map(select(.filterableValue=="y"))[0]
最好寫成
.myValues[] | select(.filterableValue=="y")
它不僅更短,而且可以更好地處理有 0 或 2 個匹配項的情況。
然后,您只需要更改... |為( ... ) |=.
( .myValues[] | select(.filterableValue=="y") ) |= ( .this = "has been added" )
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/359698.html
