0
votes

Jsonpath Expression régulière - Ne commençant pas par

My JSON (SIMPLIFIÉFIÉTÉ) ressemble à ceci:

[
   {
      "name" : "foobar",
      "id" : 123
   }
]


0 commentaires

3 Réponses :


1
votes

regex pour identifier les données ne commençant pas par une chaîne donnée foo code>: xxx pré>

si votre moteur de regex prend en charge le lookahead négatif, qui réduit à p>

^(?!foo)


0 commentaires

0
votes

Merci à @collapsar pour me faire du mal à la bonne direction, en ce que la clé de la résolution était dans l'expression régulière (mais en utilisant spécifiquement la syntaxe d'expression régulière JavaScript et la fusionner avec la syntaxe JSONPATH).

Que effectivement fini par faire l'affaire, lisait le Documentation pour JasonPath un peu plus prudent. Il indique:

= ~
Faites correspondre une expression régulière JavaScript. Par exemple, [? (@. Description = ~ /cat.*/i)] correspond à des éléments dont la description commence avec CAT (insensible à la casse).

Remarque: Non pris en charge dans des emplacements utilisés! API 1.1.

Le lien vers JavaScript Expression régulière à son tour contient les éléments suivants:

[^ xyz]
Un jeu de caractères annulé ou complété. C'est-à-dire qu'il correspond à tout ce qui n'est pas enfermé entre les crochets. Vous pouvez spécifier une gamme de caractères à l'aide d'un trait d'union. Tout ce qui fonctionne dans le jeu de caractères normal fonctionne également ici.

Par exemple, [^ ABC] est identique à [^ a-c]. Ils correspondent initialement à "R" dans "Brisket" et "H" dans "Hop".

L'expression résultante qui fonctionne est la suivante: xxx

résultat: xxx

(j'ai ajouté un additionnel avec ID 456 à la charge utile JSON que j'ai eue, pour vérifier que le filtre a également fonctionné).


3 commentaires

Votre solution ne fonctionne que par accident: quel modèle [? (@. Nom = ~ / [^ FOO]. * / est le nom de filtrage qui ne commence pas avec f ni o - donc omg serait filtré ainsi que fab , lequel n'est certainement pas ce que vous voulez même si cela fonctionne avec vos données à la main. Indépendant de cela, la documentation que vous citez est au moins trompeuse dans la prétendant que = ~ correspond à la syntaxe d'expression régulière JS tout en dissimulant que les motifs sont automatiquement augmentés avec des ancrages de démarrage et d'extrémité ( ^ , $ ).


@Collapsar - J'ai essayé exactement cela, mais cela ne fonctionne pas. Contrairement à l'intuition, pour une raison quelconque, le = ~ ne se permettra pas d'être annulé :(


Ok, alors je vais supprimer mon commentaire précédent. Merci pour les commentaires.



1
votes

Votre tentative $ .. [? (! @. Nom = ~ /foo.*/i && @ @ .Id == 123)] est presque correct. Entourez la condition de regex avec la parenthèse avant de ne pas nier avec ! comme si $ .. [? (! (@. Nom = ~ /foo.*/i) && @ .Id == 123) ] . Testé à https://jsonpath.herokuapp.com/

Edit: Cela suppose que vous utilisiez Jayway's Jsonpath (Java, https://github.com / JSON-PATH / JSONPATH ), mais à partir du lien de documentation que vous avez fourni pour Smartbear, on dirait qu'il utilise le goessner Jsonpath (JavaScript, https://goessner.net/articles/jsonpath/ ). Les deux, pour une raison quelconque, utilisez des syntaxes légèrement différentes.


0 commentaires