首頁  >  文章  >  後端開發  >  使用 JQ 的 Golang 實作時具有「列表中的值」條件

使用 JQ 的 Golang 實作時具有「列表中的值」條件

WBOY
WBOY轉載
2024-02-08 23:30:11996瀏覽

使用 JQ 的 Golang 实现时具有“列表中的值”条件

php小編小新今天要介紹的是使用JQ的Golang實作時具有"列表中的值"條件。在Golang中,JQ是一種強大的查詢語言,用於從JSON資料中提取和轉換資訊。而"列表中的值"條件是在JQ查詢中常用的一種條件,它可以用來篩選出列表中包含指定值的元素。透過使用JQ的Golang實現,我們可以輕鬆實現這項功能,從而簡化我們對JSON資料的處理過程,提高開發效率。接下來,我們將詳細介紹如何使用JQ的Golang實作來實現"列表中的值"條件。

問題內容

我在我的 Go 應用程式中使用這個函式庫:https://github.com/itchyny/gojq 它工作得很好,但我在 JQ 文件中找不到如何做某事。我有一個 jq 查詢,其輸入是設定檔中的可用商店列表,如下所示:

( [.stores[] | select( .is_open == true )] | length  > 1 ) 
     and 
( [.stores[] | select( .name == "Some store" )] | length == 1 )

基本上是說,從我所在地區的可用商店列表中,至少有一家是開放的,而且,從我所在地區的可用商店列表中,至少有一家被稱為“某些商店”。 (請注意,它是兩個獨立的條件,我不在乎“Some store”是否關閉)。

現在我需要更改此條件,這樣每個商店都會有一個“type_identifier”,它是一個字串,而不是使用第二個條件來查看名稱。基本上我想要的是這樣的東西:

( [.stores[] | select( .type_identifier in ["type1","type2", "type2"...] )] | length == 1 )

可用類型清單有大約 600 種不同的類型。 所以我的問題是:

  1. JQ 中有「in」選擇器嗎?正確的語法是什麼?
  2. 可用「類型」列表是同一物件的另一個字段,與商店列表一起,我如何直接從此屬性讀取列表?

提前致謝

解決方法

如果清單那麼長,最好建立一個查找表。

(
   [ "type1", "type2", "type3" ] |
   map( { (.): true } ) |
   add
) as $lkup |

.stores |
( map( select( .is_open ) ) | length > 1 )
   and
( map( select( $lkup[ .type_identifier ] ) ) | length == 1 )

我把常見的 .stores 分解出來,替換成了 [ .[] | ... ]map( ... )

jqplay 上的示範

您也可以使用 INDEX

(
   [ "type1", "type2", "type3" ] |
   INDEX( .[]; . )
) as $lkup |

.stores |
( map( select( .is_open ) ) | length > 1 )
   and
( map( select( $lkup[ .type_identifier ] ) ) | length == 1 )

jqplay 上的示範

以上是使用 JQ 的 Golang 實作時具有「列表中的值」條件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除