Maison > développement back-end > Golang > le corps du texte

Implémentation de Golang utilisant JQ avec la condition 'valeur dans la liste'

WBOY
Libérer: 2024-02-08 23:30:11
avant
996 Les gens l'ont consulté

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

Ce que l'éditeur php Xiaoxin va introduire aujourd'hui, c'est la condition "valeur dans la liste" lors de l'utilisation de l'implémentation Golang de JQ. Dans Golang, JQ est un langage de requête puissant pour extraire et transformer des informations à partir de données JSON. La condition « valeur dans la liste » est une condition couramment utilisée dans les requêtes JQ. Elle peut être utilisée pour filtrer les éléments de la liste qui contiennent des valeurs spécifiées. En utilisant l'implémentation Golang de JQ, nous pouvons facilement implémenter cette fonction, simplifiant ainsi notre traitement des données JSON et améliorant l'efficacité du développement. Ensuite, nous détaillerons comment implémenter la condition « valeur dans la liste » à l'aide de l'implémentation Golang de JQ.

Contenu de la question

J'utilise cette bibliothèque dans mon application Go : https://github.com/itchyny/gojq Cela fonctionne bien, mais je ne trouve pas comment faire quelque chose dans la documentation JQ. J'ai une requête jq dont l'entrée est la liste des magasins disponibles à partir du fichier de configuration comme ceci :

( [.stores[] | select( .is_open == true )] | length  > 1 ) 
     and 
( [.stores[] | select( .name == "Some store" )] | length == 1 )
Copier après la connexion

En gros, cela signifie que, dans la liste des magasins disponibles dans ma région, au moins un est ouvert et, dans la liste des magasins disponibles dans ma région, au moins un s'appelle « un magasin ». (Notez qu'il s'agit de deux conditions distinctes, je m'en fiche si "Un magasin" est fermé).

Maintenant, je dois modifier cette condition afin que chaque magasin ait un "type_identifier" qui est une chaîne au lieu d'utiliser la deuxième condition pour voir le nom. En gros, ce que je veux, c'est quelque chose comme ça :

( [.stores[] | select( .type_identifier in ["type1","type2", "type2"...] )] | length == 1 )
Copier après la connexion

La liste des types disponibles compte environ 600 types différents. Ma question est donc :

  1. Y a-t-il un sélecteur « in » dans JQ ? Quelle est la syntaxe correcte ?
  2. La liste des « types » disponibles est un autre champ du même objet, avec la liste des magasins, comment puis-je lire la liste directement depuis cette propriété ?

Merci d'avance

Solution de contournement

Si la liste est si longue, il est préférable de créer une table de recherche.

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

.stores |
( map( select( .is_open ) ) | length > 1 )
   and
( map( select( $lkup[ .type_identifier ] ) ) | length == 1 )
Copier après la connexion

J'ai mis les communs .stores 分解出来,替换成了 [ .[] | ... ]map( ... ).

Démo sur jqplay.

<小时/>

Vous pouvez également utiliser INDEX.

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

.stores |
( map( select( .is_open ) ) | length > 1 )
   and
( map( select( $lkup[ .type_identifier ] ) ) | length == 1 )
Copier après la connexion

Démo sur jqplay.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal