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查询。

 


相关文章
|
28天前
|
IDE 数据挖掘 开发工具
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
36 7
|
11天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
54 8
|
19天前
|
API Python
【Azure Developer】分享一段Python代码调用Graph API创建用户的示例
分享一段Python代码调用Graph API创建用户的示例
41 11
|
22天前
|
网络安全 Python
Python网络编程小示例:生成CIDR表示的IP地址范围
本文介绍了如何使用Python生成CIDR表示的IP地址范围,通过解析CIDR字符串,将其转换为二进制形式,应用子网掩码,最终生成该CIDR块内所有可用的IP地址列表。示例代码利用了Python的`ipaddress`模块,展示了从指定CIDR表达式中提取所有IP地址的过程。
36 6
|
27天前
|
存储 索引 Python
Python 的基本语法
这些是 Python 的基本语法要素,掌握它们是学习和使用 Python 的基础。通过不断地实践和应用,你将能够更深入地理解和熟练运用这些语法知识,从而编写出高效、简洁的 Python 代码
56 5
|
29天前
|
存储 Python
Python编程入门:理解基础语法与编写简单程序
本文旨在为初学者提供一个关于如何开始使用Python编程语言的指南。我们将从安装Python环境开始,逐步介绍变量、数据类型、控制结构、函数和模块等基本概念。通过实例演示和练习,读者将学会如何编写简单的Python程序,并了解如何解决常见的编程问题。文章最后将提供一些资源,以供进一步学习和实践。
32 1
|
1月前
|
机器学习/深度学习 数据挖掘 开发者
Python编程入门:理解基础语法与编写第一个程序
【10月更文挑战第37天】本文旨在为初学者提供Python编程的初步了解,通过简明的语言和直观的例子,引导读者掌握Python的基础语法,并完成一个简单的程序。我们将从变量、数据类型到控制结构,逐步展开讲解,确保即使是编程新手也能轻松跟上。文章末尾附有完整代码示例,供读者参考和实践。
|
1月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
1月前
|
存储 Python Perl
python正则语法
本文介绍了正则表达式的基础知识及其在 Python 中的应用。首先解释了为什么要使用正则表达式,通过一个判断手机号的示例展示了正则表达式的简洁性。接着详细介绍了 `re` 模块的常用方法,如 `match()`、`search()`、`findall()`、`finditer()` 等,并讲解了正则表达式的基本语法,包括匹配单个字符、数字、锚字符和限定符等。最后,文章还探讨了正则表达式的高级特性,如分组、编译和贪婪与非贪婪模式。
24 2
|
1月前
|
数据挖掘 Python
Python示例,展示如何找到最近一次死叉之后尚未形成金叉的位置
金融分析中,“死叉”指短期移动平均线(如MA5)跌破长期移动平均线(如MA10),而“金叉”则相反。本文提供Python代码示例,用于找出最近一次死叉后未形成金叉的位置,涵盖移动平均线计算、交叉点判断及结果输出等步骤,适合金融数据分析。
24 1
下一篇
DataWorks