[英]jq empty result by select on array
給定以下 JSON :
{
"id": "4",
"j": [
{
"f": 1,
"d": "x1"
},
{
"f": 2,
"d": "x2"
},
{
"f": 3,
"d": "x3"
}
]
}
如果選擇器更改為不存在的過濾器值,則以下查詢將產生空結果
按預期工作:
{k:.id,m:.j[] | select(.f==3)|.d}
https://jqplay.org/s/E8rS0Mf_so
空的:
{k:.id,m:.j[] | select(.f==4)|.d}
我想要的結果應該是這樣的:
{
"k": "4",
"m": null
}
如何管理空選擇結果中提出的解決方案並不容易
{k:.id,m:(.j[] | select(.f==4)|.d//null)}
也沒有在替代方案旁邊的文檔中提出的問號
這只是括號的問題。
使用您的數據,對原始查詢進行以下修改會產生如下所示的結果:
{k:.id, m: ((.j[] | select(.f==4)|.d) // null)}
結果:
{"k":"4","m":null}
在給它一個良好的睡眠之后,並嘗試手冊對此提供的內容,我想出的最簡單的解決方案是
{k:.id,m:[.j[] | select(.f==4)|.d][0]}
https://jqplay.org/s/Ao8_GuHWI4
我沒有閱讀整本手冊,但我想在某些時候它會說它會因部分結果的多樣性而上升,或者如果選擇會發現更多項目會產生多個結果!
在給定的解決方案中,即使選擇與更多項目匹配,這也不會僅返回 1 個結果
但是,您可以通過使用替代運算符實際正確地來解決它;)
{k:.id,m:([.j[] | select(.f==4)|.d][]//null)}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.