Heim  >  Artikel  >  Backend-Entwicklung  >  Golang-Implementierung mit JQ mit der Bedingung „Wert in Liste“.

Golang-Implementierung mit JQ mit der Bedingung „Wert in Liste“.

WBOY
WBOYnach vorne
2024-02-08 23:30:11993Durchsuche

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

Was der PHP-Editor Xiaoxin heute vorstellen wird, ist die Bedingung „Wert in Liste“ bei Verwendung der Golang-Implementierung von JQ. In Golang ist JQ eine leistungsstarke Abfragesprache zum Extrahieren und Transformieren von Informationen aus JSON-Daten. Die Bedingung „Wert in Liste“ ist eine häufig in JQ-Abfragen verwendete Bedingung. Sie kann zum Herausfiltern von Elementen in der Liste verwendet werden, die bestimmte Werte enthalten. Durch die Verwendung der Golang-Implementierung von JQ können wir diese Funktion einfach implementieren, wodurch unsere Verarbeitung von JSON-Daten vereinfacht und die Entwicklungseffizienz verbessert wird. Als Nächstes erklären wir im Detail, wie die Bedingung „Wert in Liste“ mithilfe der Golang-Implementierung von JQ implementiert wird.

Frageninhalt

Ich verwende diese Bibliothek in meiner Go-Anwendung: https://github.com/itchyny/gojq Es funktioniert gut, aber ich kann in der JQ-Dokumentation nicht finden, wie man etwas macht. Ich habe eine JQ-Abfrage, deren Eingabe die Liste der verfügbaren Stores aus der Konfigurationsdatei ist, etwa so:

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

Im Grunde bedeutet das, dass von der Liste der verfügbaren Geschäfte in meiner Nähe mindestens eines geöffnet ist und dass von der Liste der verfügbaren Geschäfte in meiner Nähe mindestens eines den Namen „irgendein Geschäft“ trägt. (Beachten Sie, dass es sich um zwei separate Bedingungen handelt. Es ist mir egal, ob „Irgendein Geschäft“ geschlossen ist.)

Jetzt muss ich diese Bedingung ändern, damit jedes Geschäft einen „type_identifier“ hat, der eine Zeichenfolge ist, anstatt die zweite Bedingung zu verwenden, um den Namen anzuzeigen. Im Grunde möchte ich etwa Folgendes:

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

Die Liste der verfügbaren Typen umfasst etwa 600 verschiedene Typen. Meine Frage lautet also:

  1. Gibt es in JQ einen „In“-Selektor? Was ist die richtige Syntax?
  2. Die Liste der verfügbaren „Typen“ ist neben der Store-Liste ein weiteres Feld desselben Objekts. Wie kann ich die Liste direkt aus dieser Eigenschaft lesen?

Danke im Voraus

Workaround

Wenn die Liste so lang ist, ist es besser, eine Nachschlagetabelle zu erstellen.

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

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

Ich habe die üblichen angegeben .stores 分解出来,替换成了 [ .[] | ... ]map( ... ).

Demo auf jqplay.

Sie können auch INDEX verwenden.

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

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

Demo auf jqplay.

Das obige ist der detaillierte Inhalt vonGolang-Implementierung mit JQ mit der Bedingung „Wert in Liste“.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen