Feather Background Waves Background
Aller au contenu
Feather Background Waves Background
Feather Background Waves Background
  1. JMeter en Français/

Extractor de JSON JMESPath

intermédiaire - This article is part of a series.

JSON

Qu’est-ce que JMESPath ?>

Qu’est-ce que JMESPath ? #

JMESPath a été développé en 2012 par James Saryerwinnie, ingénieur chez Mozilla Corporation, comme une alternative à la JSONPath pour accéder et manipuler les données dans des documents JSON. Le principal objectif derrière la création de JMESPath était d’élaborer un outil plus efficace et flexible pour accéder aux données dans des documents JSON qui sont largement utilisés dans les applications web et mobiles.

En les années qui suivent, JMESPath s’est popularisé parmi les développeurs travaillant avec des applications web et mobiles utilisant JSON comme format de données d’échange. Il a été intégré dans plusieurs bibliothèques populaires de Python, devenant une outil essentiel pour gérer l’infrastructure en nuage. En 2017, JMESPath s’est transformé en projet open-source sous la direction du projet Python. Depuis lors, il a été adopté par diverses bibliothèques et outils de Python tels que AWS CLI et Terraform, utilisés dans une variété de contextes, allant des analyses de données à la intégration système et au processus automatisé.

Aujourd’hui, JMESPath demeure un outil populaire pour accéder et manipuler les données dans des documents JSON utilisés dans les applications web et mobile. Il est compatible avec une variété de langages de programmation et d’infrastructurees, et est utilisé dans divers contextes tels que la gestion de l’infrastructure en nuage, le traitement du data et la mise en automate des processus.

Qu’est-ce que JSON ?>

Qu’est-ce que JSON ? #

JSON (JavaScript Object Notation) est un format de texte léger pour la transmission d’informations entre le client du navigateur et le serveur, ou entre les applications. JSON représente les données sous forme de nœuds et de listes de nœuds, en utilisant une syntaxe claire et facile à lire basée sur les clés { } pour définir les objets et les parenthèses [ ] pour définir les listes.

{
  "nombre": "Ana",
  "edad": 28,
  "direccion": {
    "calle": "Calle Principal",
    "ciudad": "Ciudad de México",
    "estado": "Ciudad de México",
    "codigo_postal": "12345"
  },
  "intereses": ["leer","viajar","cocinar"]
}
PropriétéDescriptionObligatoire
NomNom décrivant ce élément qui est affiché dans la hiérarchie.Non
Appliquer àUtile lorsque utilisé avec les mappers qui peuvent générer des sous-samples, tels que le sampler HTTP avec des ressources embedées, Lecteur de Mail ou un contrôleur de transaction générés.

Sous-samples uniquement: s’applique uniquement aux sous-samples
Sous-samples et principaux: s’applique à tous les deux
Principaux et sous-samples: s’applique à tous les deux
Nom de variable utilisé dans JMeter: l’extraction sera appliquée au contenu du nom de la variable défini
Oui
Nom de Variable CréationLe nom de la variable JMeter où le résultat sera stocké.Oui
Expressions JMESPathUtiliser la langue JMESPath pour requérir l’élément.

0: sélection aléatoire
-1: tous les résultats (par défaut), nommé comme <variable name>_N où N est de 1 à le nombre d’occurrences
Non
Nombre Par défaut des Matches (-1 pour aléatoire)Si la requête JMESPath a beaucoup d’occurrences, vous pouvez choisir lesquelles seront extraitées en tant que variables:

0: sélection aléatoire
-1: tous les résultats (par défaut), nommé comme <variable name>_N où N est de 1 à le nombre d’occurrences
X: extraire la _X_ème occurrence (où X est plus grand que le nombre d’occurrences, valeur par défaut)
Non
Valeur Par défautValeur par défaut retournée lorsque aucune correspondance n’est trouvée. De même retourne si l’élément n’a pas de valeur et option fragment non sélectionnée.Non

jmeter-1

{
  "nombre": "Ana",
  "edad": 28,
  "direccion": {
    "calle": "Calle Principal",
    "ciudad": "Ciudad de México",
    "estado": "Ciudad de México",
    "codigo_postal": "12345"
  },
  "intereses": ["leer","viajar","cocinar"]
}
nombre              //Ana
edad                //28
direccion.calle     //Calle Principal
direccion.codigo_postal    //12345
direccion.ciudad    //Ciudad de México
hobbies             //["leer","viajar","cocinar"]
What other usage examples might JMESPath have?>

What other usage examples might JMESPath have? #

Let’s consider a more complex example, like the following:

[{
  "name": "John Doe",
  "age": 35,
  "address": {
    "street": "123 Main St",
    "city": "Anytown",
    "state": "WA"
  },
  "phoneNumbers": [
    {
      "type": "mobile",
      "number": "555-551-1234"
    },
    {
      "type": "home",
      "number": "555-552-5678"
    }
  ],
  "email": "john.doe@example.com"
},{
  "name": "Peter Doe",
  "age": 34,
  "address": {
    "street": "123 Second St",
    "city": "RacconCity",
    "state": "TX"
  },
  "phoneNumbers": [
    {
      "type": "mobile",
      "number": "555-553-1234"
    },
    {
      "type": "home",
      "number": "555-554-5678"
    }
  ],
  "email": "peter.doe@example.com"
},{
  "name": "Rick Doe",
  "age": 36,
  "address": {
    "street": "123 Third St",
    "city": "Springfield",
    "state": "NJ"
  },
  "phoneNumbers": [
    {
      "type": "mobile",
      "number": "555-555-1234"
    },
    {
      "type": "home",
      "number": "555-556-5678"
    }
  ],
  "email": "rick.doe@example.com"
}]

For this example, suppose we want to evaluate and extract the following data:

ExpressionResult
[*].namereturns all the names of the people.
[0].phoneNumbers[0].numberreturns the mobile phone number of the first phoneNumbers object.
[?address.state=='WA'].namereturns the names of people whose state is WA.
[*].phoneNumbers[?type=='mobile'].numberreturns the mobile phone numbers of the phoneNumbers objects.
length([*].phoneNumbers[?type=='home'])returns the number of phoneNumbers objects of type home.
sort_by(@, &age)[0].nameReturns the name of the youngest person.
sort_by(@, &age)[-1].nameReturns the name of the oldest person.
max_by(@, &age).nameReturns the name of the oldest person.
min_by(@, &age).nameReturns the name of the youngest person.
[*].name | sort(@)Returns a list of people’s names in alphabetical order.
sum([*].age)Returns the sum of all ages.
length([*].phoneNumbers)Returns the number of phone numbers.
join(', ', [*].phoneNumbers[].number)Returns a string containing a list of all phone numbers.
[?age >= `35` ]Returns the names of people whose age is greater than 35.
[?age >= `35`] | [?address.state == ‘WA’].nameReturns the names of people over the age of 35 who live in WA.
[?contains(email,'john')].email | [0]Returns the email address of the person whose name contains john.
[?contains(name, 'Doe')].phoneNumbers[].number | [1]Returns the second phone number of people whose name contains Doe.
[?address.state=='TX'].address.city | sort(@) | [0]Returns the name of the smallest city in Texas.
[*].name | reverse(@)Returns the names of people from oldest to youngest.
[*].age | sum(@)returns the sum of all ages.

Pour évaluer ces phrases, je recommande d’utiliser un récepteur Voir les résultats du arbre et de l’utiliser dans le mode JSON JMESPath Tester. Introduisez la phrase dans le champ Expression JMESPath, puis cliquez sur le bouton Tester.

jmeter-2

Conclusion>

Conclusion #

JMESPath est un outil très puissant pour extraire des valeurs, plusieurs valeurs, l’évaluation ou la mise en œuvre de fonctions à partir des valeurs qui satisfont une ou plusieurs critères, toujours n’oubliez pas d’exercer avant de développer votre phrase ou expression. Il est toujours bon de vérifier les critères avec différentes types de réponses pour obtenir des résultats conclusifs. Vous devez pratiquer jusqu’à la prochaine fois!



intermédiaire - This article is part of a series.