簡體   English   中英

通過在數組上選擇 jq 空結果

[英]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)}

https://jqplay.org/s/uBG5c969pf

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM