Skip to main content
  1. JMeter en Español/

JSON Extractor - JSONPath

·7 mins· 0 · 0 ·
intermedio jsonpath jmeter JSON extractor
Intermedio - This article is part of a series.
Part 16: This Article

JSON

¿ Qué es JSONPath ?>

¿ Qué es JSONPath ? #

La especificación de JSONPath fue creada en 2007 por Stefan Goessner como una alternativa al lenguaje XPath utilizado para acceder a datos en documentos XML. Goessner creó JSONPath como una forma de acceder y manipular datos en documentos JSON utilizando una sintaxis similar a XPath. En los años siguientes, JSONPath se hizo cada vez más popular entre los desarrolladores que trabajan con aplicaciones web y móviles que utilizan JSON como formato de intercambio de datos. La especificación de JSONPath fue adoptada por varias bibliotecas y herramientas populares de JavaScript, como jQuery y JSONPath+.

En 2012, la especificación de JSONPath fue adoptada como un estándar de Internet por la Open Web Foundation, lo que ayudó a impulsar su adopción y aceptación en la comunidad de desarrolladores. Hoy en día, JSONPath sigue siendo una herramienta popular para acceder y manipular datos en documentos JSON en aplicaciones web y móviles. Es compatible con una amplia variedad de lenguajes de programación, y se utiliza en una variedad de contextos, como el análisis de datos, la integración de sistemas y la automatización de procesos.

¿ Qué es JSON ?>

¿ Qué es JSON ? #

JSON (JavaScript Object Notation) es un formato de texto ligero y fácil de leer para el intercambio de datos. Se utiliza comúnmente para transmitir información entre una aplicación cliente y un servidor o para transmitir datos entre aplicaciones. JSON representa datos en forma de objetos anidados y listas de objetos, y utiliza una sintaxis clara y fácil de leer basada en llaves { } para definir objetos y corchetes [ ] para definir listas.

Las propiedades de un objeto JSON se representan como pares clave y valor { "nombre" : "Juan" } separados por dos puntos : como se puede ver en el siguiente jemplo:

{
  "nombre": "Juan",
  "edad": 30,
  "direccion": {
    "calle": "Calle Falsa",
    "numero": "123",
    "ciudad": "Buenos Aires"
  },
  "hobbies": ["futbol", "pintura", "viajes"]
}
¿ Cómo funciona JSON Extractor en JMeter ?>

¿ Cómo funciona JSON Extractor en JMeter ? #

En JMeter, JSONPath es un Post-procesador que permite extraer valores específicos de una respuesta JSON. Para ello debemos seguir los siguientes pasos:

  1. Agregue un elemento HTTP Request o Dummy Sampler a su plan de prueba de JMeter para realizar una solicitud HTTP y recibir una respuesta JSON.
  2. Agregue un extractor JSON Extractor al elemento antes mencionado, este extractor se encargará de extraer los valores específicos que se necesitan de la respuesta JSON.
  3. Configure los campos requeridos en el post-procesador JSON Extractor como se muestra en la siguiente tabla:
AtributoDescripciónRequerido
NombreNombre descriptivo para este elemento que se muestra en el árbol.No
Aplicar aÚtil para su uso con muestreadores que pueden generar sub-muestras, como el muestreador HTTP con recursos incrustados o las muestras generadas por el controlador de transacciones.

Muestra principal solamente: solo se aplica a la muestra principal
Solo sub-muestras: solo se aplica a las sub-muestras
Muestra principal y sub-muestras: se aplica a ambas
Nombre de la variable JMeter a utilizar: la extracción se aplicará al contenido de la variable nombrada
Nombres de las variables creadasNombres separados por punto y coma de las variables que contendrán los resultados de las expresiones JSONPath (deben coincidir con el número de expresiones JSONPath)
Expresiones JSON PathExpresiones JSONPath separadas por punto y coma (deben coincidir con el número de variables)
Valores predeterminadosValores predeterminados separados por punto y coma si las expresiones JSONPath no devuelven ningún resultado (deben coincidir con el número de variables)No
Números de coincidenciasPara cada expresión JSON Path, si la consulta JSON Path tiene muchos resultados, puedes elegir cuál(es) extraer como variables:

0: significa aleatorio (valor predeterminado)
-1: significa extraer todos los resultados, se llamarán como <nombre de la variable>_N (donde N va de 1 al número de resultados)
X: significa extraer el resultado X (enésimo). Si este X (enésimo) es mayor que el número de coincidencias, no se devuelve nada. Se utilizará el valor predeterminado

Los números deben darse como una lista separada por punto y coma. La cantidad de elementos en esa lista debe coincidir con el número de expresiones JSON Path dadas. Si se deja vacío, el valor 0 se utilizará como predeterminado para cada expresión.
No
Calcular la variable de concatenaciónSi se encuentran muchos resultados, el complemento los concatenará utilizando el separador ‘,’ y lo almacenará en una variable llamada <nombre de la variable>_ALLNo

jmeter-1

Ejemplo:

{
  "nombre": "Juan",
  "edad": 30,
  "direccion": {
    "calle": "Calle Falsa",
    "numero": "123",
    "ciudad": "Buenos Aires"
  },
  "hobbies": ["futbol", "pintura", "viajes"]
}

Podemos utilizar la siguiente expresión JSONPath para extraer estos valores:

$.nombre              //Juan
$.edad                //30
$.direccion.calle     //Calle Falsa
$.direccion.numero    //123
$.direccion.ciudad    //Buenos Aires
$.hobbies             //["futbol","pintura","viajes"]

jmeter-2

¿ Qué es JSONPath Query ?>

¿ Qué es JSONPath Query ? #

JSONPath Query es un lenguaje de consulta utilizado para acceder y manipular datos en documentos JSON. Es similar a JSONPath, pero utiliza una sintaxis ligeramente diferente. JSONPath Query admite una variedad de funciones y operadores que permiten realizar consultas más complejas en objetos JSON. Por ejemplo, la expresión $.hobbies[?(@=='pintura')] devolvería un arreglo si el objeto JSON tiene pintura como uno de sus hobbies.

¿ Qué otros ejemplos de uso pudiera tener JSONPath Query ?>

¿ Qué otros ejemplos de uso pudiera tener JSONPath Query ? #

Supongamos un ejemplo más complejo, como el siguiente:

[{
  "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"
}]

Para este ejemplo, supogamos que deseamos evaluar y extraer los siguiente datos:

ExpresiónResultado
$[0].namedevuelve el nombre del primer objeto, John Doe.
$[1].phoneNumbers[0].phoneNumbersdevuelve el número de teléfono del segundo objeto, 555-553-1234.
$[2].address.statedevuelve el estado de la dirección del tercer objeto, NJ.
$[*].emaildevuelve todos los correos electrónicos en el objeto JSON.
$[*].phoneNumbers[?(@.type=='mobile')].numberdevuelve todos los números de teléfono móvil.
$[*].agedevuelve todas las edades en el objeto JSON.
$[?(@.name=='Rick Doe')].address.citydevuelve la ciudad de la dirección de Rick Doe, Anytown.
$[?(@.age>35)].namedevuelve los nombres de personas mayores de 35 años.
$[?(@.phoneNumbers[0].number=='555-551-1234')].namedevuelve el nombre del teléfono , John Doe.
$[?(@.address.state=='TX')].phoneNumbers[*].numberdevuelve los teléfonos para las personas que viven en Texas.
$[?(@.address.city contains 'Anytown')].namedevuelve el nombre de los que vivan en la ciudad Anytown.
$[?(@.age > 30 && @.address.state == 'TX')]devuelve la edad es mayor de 30 y la dirección es de TX.
$..age.min()devuelve el valor mínimo de la propiedad age, que es 34.
$..age.max()devuelve el valor máximo de la propiedad age, que es 36.
$..age.sum()devuelve la suma de la propiedad age, que es 105.
$.phoneNumbers.length()devuelve la longitud phoneNumbers, que es 2.

Para evaluar estas sentencias, te recomiendo utilizar un receptor View results tree y utilizar la vista en JSON Path Tester e introducir la sentencia en el campo JSON Path Expression y dar click en el boton Test

jmeter-3

Conclusión>

Conclusión #

JSONPath y JSONPath Query son herramientas muy poderosas para extraer un valor o multiples valores o evaluación de los mismos para satisfacer uno o varios criterios, recuerda siempre practicar antes de desarrollar tu sentencia o expression. Siempre es bueno verificar los criterios ante varios tipos de respuestas diferentes para obtener resultados contundentes. Hay que practicar, hasta la próxima!



Intermedio - This article is part of a series.
Part 16: This Article