python之JMESPath:JSON 查询语法库示例详解

简介: python之JMESPath:JSON 查询语法库示例详解

JMESPath是一个用于处理和查询JSON数据的查询语法库。它允许您以简单、一致和强大的方式从复杂的JSON结构中提取数据。在本文中,我将为您提供一个详细的JMESPath示例,以便您了解如何使用它。

首先,我将简要介绍JMESPath的基本思想和一些常用的查询操作符,然后我将通过一个具体的示例来说明如何使用JMESPath进行JSON查询。

JMESPath基本思想:

JMESPath的基本思想是使用类似于XPath的路径表达式来指定要从JSON结构中提取哪些数据。它允许您以一致的方式导航和过滤JSON对象和数组。JMESPath支持以下几种操作符:

  1. 点操作符(.): 用于访问JSON对象中的属性或数组中的元素。
  2. 方括号操作符([]): 用于访问JSON数组中的元素,可以使用索引、迭代和过滤数组。
  3. 通配符(*)和多级通配符(**): 用于匹配任意层级的属性或数组元素。
  4. 过滤器(?): 用于根据条件过滤数组元素。
  5. 比较操作符: 支持等于(==)、不等于(!=)、小于(<)、小于等于(<=)、大于(>)和大于等于(>=)等比较操作符。
  6. 逻辑操作符: 支持与(and)、或(or)和非(not)等逻辑操作符。

现在,让我们通过一个具体示例来说明如何使用JMESPath进行JSON查询。

示例:

假设我们有以下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
      }
    }
  ]
}

我们将使用JMESPath来执行以下查询操作:

1.提取所有学生的名字和年龄:
students[].{ "name": name, "age": age }

这个查询将返回一个包含所有学生名字和年龄的列表:

[
  {
    "name": "Alice",
    "age": 18
  },
  {
    "name": "Bob",
    "age": 20
  },
  {
    "name": "Charlie",
    "age": 19
  }
]
2.提取所有学生的姓名、科目和对应的分数:
students[].{ "name": name, "grades": grades }

这个查询将返回一个包含所有学生姓名、科目和对应分数的列表:

[
  {
    "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.提取分数大于90分的学生姓名:
students[?grades.math > `90`].name

这个查询将返回一个包含分数大于90分的学生姓名的列表:

[
  "Alice"
]

以上只是一些基础的JMESPath查询示例,JMESPath还支持更复杂的查询操作。您可以使用JMESPath来过滤、排序、组合和转换JSON数据。以下是一些其他常见的JMESPath查询示例:

4.提取所有学生的平均分数:
students[].{ 
  "name": name, 
  "average_grade": (grades.math + grades.english + grades.science) / 3 
}

这个查询将返回一个包含所有学生姓名和平均分数的列表:

[
  {
    "name": "Alice",
    "average_grade": 89
  },
  {
    "name": "Bob",
    "average_grade": 81
  },
  {
    "name": "Charlie",
    "average_grade": 85
  }
]
5.提取平均分数最高的学生姓名:
students[].{ 
  "name": name, 
  "average_grade": (grades.math + grades.english + grades.science) / 3 
} | max_by(@, &average_grade).name

这个查询将返回平均分数最高的学生姓名:

"Alice"
6.提取每个科目的最高分数:
{
  "math": max(students[].grades.math),
  "english": max(students[].grades.english),
  "science": max(students[].grades.science)
}

这个查询将返回每个科目的最高分数:

{
  "math": 90,
  "english": 92,
  "science": 92
}
7.提取年龄在18到20之间的学生姓名:
students[age >= `18` && age <= `20`].name

这个查询将返回年龄在18到20之间的学生姓名:

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


这些示例演示了JMESPath的一些常见用法,您可以使用更复杂的查询来满足您的需求。JMESPath还有更多功能,如嵌套查询、支持正则表达式、对查询结果进行转换等,您可以参考官方文档以获取更详细的信息。


希望这些示例能够帮助您理解JMESPath的基本概念和用法,以便您能够在Python中轻松使用它进行JSON查询。

 


相关文章
|
1天前
|
前端开发 数据库 Python
Python Django项目下的分页和筛选查询
在Django中实现分页功能,视图函数通过`Paginator`处理数据,每页显示10条记录。URL配置支持带参数和不带参数的分页请求。前端模板使用for循环展示分页数据,包括商品信息和状态按钮,并利用分页组件导航。筛选查询视图根据GET请求的`state`参数过滤上架或下架产品,同样实现分页功能。前端添加状态选择下拉框,分页链接携带查询参数`state`确保筛选状态在翻页时保持。
|
1天前
|
Web App开发 JSON JavaScript
|
3天前
|
机器学习/深度学习 调度 Python
SOFTS: 时间序列预测的最新模型以及Python使用示例
这是2024年4月《SOFTS: Efficient Multivariate Time Series Forecasting with Series-Core Fusion》中提出的新模型,采用集中策略来学习不同序列之间的交互,从而在多变量预测任务中获得最先进的性能。
17 4
|
4天前
|
数据安全/隐私保护 Python
Python以及基础语法保姆级教程(超详细)-3
Python以及基础语法保姆级教程(超详细)
|
4天前
|
存储 Python 容器
Python以及基础语法保姆级教程(超详细)-2
Python以及基础语法保姆级教程(超详细)
|
4天前
|
机器学习/深度学习 Linux 开发者
Python以及基础语法保姆级教程(超详细)-1
Python以及基础语法保姆级教程(超详细)
|
4天前
|
JSON API 数据格式
如何用 Python 的 requests 库发送 JSON 数据的 POST 请求
使用 requests 库发送 JSON 数据的 POST 请求是一个非常简单且实用的操作。通过将目标 URL 和 JSON 数据传递给 requests.post 方法,你可以轻松发送请求并处理响应。本篇文章介绍了从安装 requests 库,到发送 JSON 数据的 POST 请求,再到处理响应的整个流程。希望这篇文章能帮助你更好地理解并应用这个强大的 HTTP 请求库。
|
5天前
|
存储 JSON JavaScript
使用Python处理JSON格式数据
使用Python处理JSON格式数据
|
6天前
|
JSON 数据格式 Python
python3 服务端使用CGI脚本处理POST的Json数据
python3 服务端使用CGI脚本处理POST的Json数据
21 6
|
2天前
|
JSON 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在使用CDAS语法同步MySQL数据到Hologres时,如果开启了字段类型宽容模式,MySQL中的JSON类型会被转换为什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

热门文章

最新文章