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

WBOY
Freigeben: 2024-02-08 23:30:11
nach vorne
964 Leute haben es durchsucht

使用 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 )
Nach dem Login kopieren

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 )
Nach dem Login kopieren

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 )
Nach dem Login kopieren

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 )
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!