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.
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 )
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 )
La liste des types disponibles compte environ 600 types différents. Ma question est donc :
Merci d'avance
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 )
J'ai mis les communs .stores
分解出来,替换成了 [ .[] | ... ]
与 map( ... )
.
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 )
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!