Python 中的 JSONPath 和 JMESPath

在处理 JSON 数据时,方便地进行数据查询和提取是一项重要的功能。Python 中的 JSONPath 和 JMESPath 是两种流行的工具,使我们能够轻松地从复杂的 JSON 对象中获取所需的信息。本文将介绍这两种工具的基本用法,并提供代码示例,帮助读者更好地理解。

JSONPath

JSONPath 是一种用于查询 JSON 数据的语法,类似于 XPath 在 XML 中的作用。它允许用户在 JSON 数据结构中以简洁的方式提取信息。安装 JSONPath 的库非常简单,可以通过 pip 命令进行安装:

pip install jsonpath-ng

下面是一个基本示例,展示如何使用 JSONPath 来提取数据。

示例代码

import json
from jsonpath_ng import jsonpath, parse

data = '''
{
  "store": {
    "book": [
      {
        "category": "reference",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": 8.95
      },
      {
        "category": "fiction",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "price": 12.99
      }
    ]
  }
}
'''

json_data = json.loads(data)
jsonpath_expr = parse('$.store.book[*].author')
authors = [match.value for match in jsonpath_expr.find(json_data)]

print(authors)  # 输出: ['Nigel Rees', 'Evelyn Waugh']

如上代码中,我们首先解析 JSON 数据,并使用 JSONPath 语法提取书籍的作者。$ 符号用于表示 JSON 数据的根节点,[*] 表示所有元素。

JMESPath

JMESPath 是另一种用于从 JSON 数据中查询、提取信息的工具。与 JSONPath 不同的是,JMESPath 的语法更简洁并且功能强大。要使用 JMESPath,只需安装相应的库:

pip install jmespath

示例代码

import jmespath

data = {
    "store": {
        "book": [
            {
                "category": "reference",
                "author": "Nigel Rees",
                "title": "Sayings of the Century",
                "price": 8.95
            },
            {
                "category": "fiction",
                "author": "Evelyn Waugh",
                "title": "Sword of Honour",
                "price": 12.99
            }
        ]
    }
}

authors = jmespath.search('store.book[*].author', data)

print(authors)  # 输出: ['Nigel Rees', 'Evelyn Waugh']

在上述代码中,我们使用 JMESPath 来获取同样的信息。store.book[*].author 语法能够快速提取书籍的作者列表。

可视化展示

为了加深对数据提取的理解,让我们可视化书本的类别分布,使用饼状图来展现。

pie
    title 书籍类别分布
    "参考": 1
    "小说": 1

总结

JSONPath 和 JMESPath 都是处理 JSON 数据的重要工具,各自有独特的优点。通过简洁的语法,我们可以快速提取和查询复杂数据结构中的信息。随着数据处理需求的增加,合理地使用这些工具,将大大提高工作效率。希望本文能帮助读者更好地掌握这两种查询工具,为后续的数据分析打下良好的基础。