JMESPath de Python: explicación detallada del ejemplo de biblioteca de sintaxis de consultas JSON

JMESPath es una biblioteca de sintaxis de consulta para procesar y consultar datos JSON. Le permite extraer datos de estructuras JSON complejas de una manera fácil, consistente y poderosa. En este artículo, le proporcionaré un ejemplo detallado de JMESPath para que pueda entender cómo usarlo.

Primero, presentaré brevemente la idea básica de JMESPath y algunos operadores de consulta de uso común, y luego usaré un ejemplo específico para ilustrar cómo usar JMESPath para consultas JSON.

Idea básica de JMESPath: La
idea básica de JMESPath es usar expresiones de ruta similares a XPath para especificar qué datos extraer de la estructura JSON. Le permite navegar y filtrar matrices y objetos JSON de manera consistente. JMESPath admite los siguientes operadores:

  1. Operador de punto (.): se utiliza para acceder a propiedades en objetos JSON o elementos en matrices.
  2. Operador de paréntesis ([]): se utiliza para acceder a elementos en matrices JSON, puede usar matrices de indexación, iteración y filtrado.
  3. Comodines (*) y comodines de varios niveles (**): se utilizan para hacer coincidir atributos o elementos de matriz en cualquier nivel.
  4. Filtro (?): se utiliza para filtrar elementos de matriz en función de las condiciones.
  5. Operadores de comparación: admite operadores de comparación como igual a (==), distinto de (!=), menor que (<), menor o igual que (<=), mayor que (>) y mayor o igual a (>=).
  6. Operadores lógicos: se admiten operadores lógicos como y (y), o (o) y no (no).

Ahora, veamos un ejemplo concreto de cómo usar JMESPath para consultas JSON.

Ejemplo:
supongamos que tenemos los siguientes datos JSON:

{
  "students": [
    {
      "name": "Alice",
      "age": 18,
      "grades": {
        "math": 90,
        "english": 85,
        "science": 92
      }
    },
    {
      "name": "Bob",
      "age": 20,
      "grades": {
        "math": 75,
        "english": 88,
        "science": 80
      }
    },
    {
      "name": "Charlie",
      "age": 19,
      "grades": {
        "math": 85,
        "english": 92,
        "science": 78
      }
    }
  ]
}

Usaremos JMESPath para realizar las siguientes operaciones de consulta:

1. Extraiga los nombres y edades de todos los estudiantes:

students[].{ "name": name, "age": age }

Esta consulta devolverá una lista con los nombres y edades de todos los estudiantes:

[
  {
    "name": "Alice",
    "age": 18
  },
  {
    "name": "Bob",
    "age": 20
  },
  {
    "name": "Charlie",
    "age": 19
  }
]

2. Extraiga los nombres, materias y puntajes correspondientes de todos los estudiantes:

students[].{ "name": name, "grades": grades }

Esta consulta devolverá una lista con todos los nombres de los estudiantes, materias y calificaciones correspondientes:

[
  {
    "name": "Alice",
    "grades": {
      "math": 90,
      "english": 85,
      "science": 92
    }
  },
  {
    "name": "Bob",
    "grades": {
      "math": 75,
      "english": 88,
      "science": 80
    }
  },
  {
    "name": "Charlie",
    "grades": {
      "math": 85,
      "english": 92,
      "science": 78
    }
  }
]

3. Extraiga los nombres de los alumnos cuyas puntuaciones sean superiores a 90:

students[?grades.math > `90`].name

Esta consulta devolverá una lista que contiene los nombres de los estudiantes con puntajes superiores a 90:

[
  "Alice"
]

Los anteriores son solo algunos ejemplos básicos de consultas de JMESPath, y JMESPath también admite operaciones de consulta más complejas. Puede usar JMESPath para filtrar, clasificar, combinar y transformar datos JSON. Aquí hay algunos otros ejemplos comunes de consultas JMESPath:

4. Extrae la puntuación media de todos los alumnos:

students[].{ 
  "name": name, 
  "average_grade": (grades.math + grades.english + grades.science) / 3 
}

Esta consulta devolverá una lista con todos los nombres de los estudiantes y las calificaciones promedio:

[
  {
    "name": "Alice",
    "average_grade": 89
  },
  {
    "name": "Bob",
    "average_grade": 81
  },
  {
    "name": "Charlie",
    "average_grade": 85
  }
]

5. Extraiga el nombre del alumno con mayor puntaje promedio:

students[].{ 
  "name": name, 
  "average_grade": (grades.math + grades.english + grades.science) / 3 
} | max_by(@, &average_grade).name

Esta consulta devolverá el nombre del estudiante con el puntaje promedio más alto:

"Alice"

6. Extrae la puntuación más alta de cada asignatura:

{
  "math": max(students[].grades.math),
  "english": max(students[].grades.english),
  "science": max(students[].grades.science)
}

Esta consulta devolverá la puntuación más alta para cada tema:

{
  "math": 90,
  "english": 92,
  "science": 92
}

7. Extraiga los nombres de los estudiantes cuya edad está entre 18 y 20 años:

students[age >= `18` && age <= `20`].name

Esta consulta devolverá los nombres de los estudiantes cuyas edades están entre 18 y 20 años:

[
  "Alice",
  "Bob",
  "Charlie"
]

Estos ejemplos demuestran algunos usos comunes de JMESPath, y puede usar consultas más complejas para satisfacer sus necesidades. JMESPath también tiene más funciones, como consultas anidadas, soporte para expresiones regulares, conversión de resultados de consultas, etc. Puede consultar la documentación oficial para obtener información más detallada.

Espero que estos ejemplos lo ayuden a comprender los conceptos básicos y el uso de JMESPath para que pueda usarlo fácilmente en Python para consultas JSON.

 

Supongo que te gusta

Origin blog.csdn.net/naer_chongya/article/details/131601329
Recomendado
Clasificación