@aws-lambda-powertools/jmespath

中文文档
2.36.0发布于 2026/10/06MIT-0TypeScriptESM + CJS构建来源已验证近 30 天下载 55.7万

使用 JMESPath 从 JSON 文档中解析和提取数据的安全和现代 jmesspath 模块

中文使用文档
文档目录13 节
  1. 介绍
  2. 使用量
  3. 基本用途
  4. 从信封中提取数据
  5. JMESPath 自定义函数
  6. 贡献
  7. 路线图
  8. 连接
  9. 如何支持 AWS Lambda (TypeScript) 的 Powertools ?
  10. 成为参考客户
  11. 分享你的工作
  12. 使用 Lambda 层
  13. 许可证

AWS Lambda (TypeScript) - JMESPath Uttility 的动力工具

用于 AWS Lambda (TypeScript) 的 Powertools 是用于执行无服务器的开发者工具包 最佳做法和增加开发者的速度。 。 。 .

您可以在 TypeScript 和 JavaScript 代码基础中使用软件包.

介绍

JMESPath工具是一个高级函数,用来使用JMESPath表达式来解析和提取JSON对象的数据.

使用量

要启动, 请通过运行安装库 :

npm i @aws-lambda-powertools/jmespath

基本用途

在其核心中,库提供了使用JMESPath表达式从JSON对象中提取数据的功能.

import { search } from '@aws-lambda-powertools/jmespath';
import { Logger } from '@aws-lambda-powertools/logger';

const logger = new Logger();

type MyEvent = {
  foo: {
    bar: string;
  };
}

export const handler = async (event: MyEvent): Promise<void> => {
  const result = search(event, 'foo.bar');
  logger.info(result); // "baz"
};

从信封中提取数据

在某些情况下,您可能想要从信封中提取数据 。 库提供一种工具功能来帮助您操作信封并从中提取数据.

import { extractDataFromEnvelope } from '@aws-lambda-powertools/jmespath/envelopes';

type MyEvent = {
  body: string; // "{\"customerId\":\"dd4649e6-2484-4993-acb8-0f9123103394\"}"
  deeplyNested: Array<{ someData: number[] }>;
};

type MessageBody = {
  customerId: string;
};

export const handler = async (event: MyEvent): Promise<unknown> => {
  const payload = extractDataFromEnvelope<MessageBody>(
    event,
    'powertools_json(body)'
  );
  const { customerId } = payload; // now deserialized

  // also works for fetching and flattening deeply nested data
  const someData = extractDataFromEnvelope<number[]>(
    event,
    'deeplyNested[*].someData[]'
  );

  return {
    customerId,
    message: 'success',
    context: someData,
    statusCode: 200,
  };
};

图书馆提供 一套内置信封 帮助您从S3、SQS、SNS等常见事件源提取数据.

import {
  extractDataFromEnvelope,
  SQS,
} from '@aws-lambda-powertools/jmespath/envelopes';
import { Logger } from '@aws-lambda-powertools/logger';
import type { SQSEvent } from 'aws-lambda';

const logger = new Logger();

type MessageBody = {
  customerId: string;
};

export const handler = async (event: SQSEvent): Promise<void> => {
  const records = extractDataFromEnvelope<Array<MessageBody>>(event, SQS);
  for (const record of records) {
    // records is now a list containing the deserialized body of each message
    const { customerId } = record;
    logger.appendKeys({ customerId });
  }
};

JMESPath 自定义函数

除了所有的东西 jMESPath 内建函数,该库提供自定义功能来帮助您使用复杂的数据结构。 例如,你可以使用 powertools_json 函数分析 JSON 字符串,或 powertools_base64 函数以解码一个基数64-编码字符串:

import { extractDataFromEnvelope } from '@aws-lambda-powertools/jmespath/envelopes';
import { Logger } from '@aws-lambda-powertools/logger';

const logger = new Logger();

export const handler = async (event: { payload: string }): Promise<void> => {
  const data = extractDataFromEnvelope<string>(
    event,
    'powertools_json(powertools_base64(payload))'
  );

  logger.info('Decoded payload', { data });
};

最后,您也可以通过自己的自定义功能来扩展库. 下面是一个如何创建自定义函数来解码Brotli压缩字符串的例子.

import { fromBase64 } from '@aws-lambda-powertools/commons/utils/base64';
import { extractDataFromEnvelope } from '@aws-lambda-powertools/jmespath/envelopes';
import { PowertoolsFunctions } from '@aws-lambda-powertools/jmespath/functions';
import { Logger } from '@aws-lambda-powertools/logger';
import { brotliDecompressSync } from 'node:zlib';

const logger = new Logger();

class CustomFunctions extends PowertoolsFunctions {
  @PowertoolsFunctions.signature({
    argumentsSpecs: [['string']],
    variadic: false,
  })
  public funcDecodeBrotliCompression(value: string): string {
    const encoded = fromBase64(value, 'base64');
    const uncompressed = brotliDecompressSync(encoded);

    return uncompressed.toString();
  }
}

export const handler = async (event: { payload: string }): Promise<void> => {
  const message = extractDataFromEnvelope<string>(
    event,
    'Records[*].decode_brotli_compression(notification) | [*].powertools_json(@).message',
    { customFunctions: new CustomFunctions() }
  );

  logger.info('Decoded message', { message });
};

贡献

如果你有兴趣为这个项目捐款,请参见我们 贡献准则。 。 。 .

路线图

AWS Lambda(英语:TypeScript)的"Powertools"行进图受顾客需求所驱动.
帮助我们确定未来功能或公用事业的优先次序 更新现有 RFC 和功能请求,或 创建新的,在此 GitHub 仓库中.

连接

如何支持 AWS Lambda (TypeScript) 的 Powertools ?

成为参考客户

了解哪些公司正在使用这个图书馆对于帮助在内部确定项目的优先次序很重要。 如果您的公司正在使用 Powertools 为 AWS Lambda (TypeScript) , 您可以要求您在 README 文件中添加您的姓名和标志 AWS Lambda( TypeScript) 的辅助电源工具(成为参考) 问题.

除其他外,下列公司使用Powertools:

分享你的工作

分享您为 AWS Lambda (TypeScript) 所做的 Powertools 。 看看社区有什么 已经共享 关于AWS Lambda的Powertools (TypeScript).

使用 Lambda 层

这帮助我们了解谁用Powertools为AWS Lambda(英语:TypeScript (TypeScript))以非侵入性的方式使用Powertools,并帮助我们获得未来对其他AWS Lambda语言的Powertool的投资. 何时 使用图层,您可以添加Powertools作为dev的依赖性,以不影响开发过程.

许可证

这个图书馆根据MIT-0许可证获得许可. 见LICENSE文件.

版本与发布记录

@aws-lambda-powertools/jmespath 共发布 49 个版本,首次发布于 2024/02/22;过去 12 个月发布了 11 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
2.36.0latest2026/10/061 个月前
2.35.02026/08/182 个月前
2.34.02026/07/103 个月前
2.33.12026/05/255 个月前
2.33.02026/04/146 个月前
2.32.02026/03/197 个月前

关于 @aws-lambda-powertools/jmespath 的常见问题

@aws-lambda-powertools/jmespath 是什么?

使用 JMESPath 从 JSON 文档中解析和提取数据的安全和现代 jmesspath 模块

如何安装 @aws-lambda-powertools/jmespath?

在项目目录运行 npm install @aws-lambda-powertools/jmespath,或使用 pnpm add / yarn add / bun add。

@aws-lambda-powertools/jmespath 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@aws-lambda-powertools/jmespath 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@aws-lambda-powertools/jmespath 可以商用吗?

@aws-lambda-powertools/jmespath 使用 MIT-0 许可。声明的许可为 MIT-0,请阅读许可原文确认使用条件。以上为概括,不构成法律意见,请以许可原文为准。

@aws-lambda-powertools/jmespath 的下载量有多少?

根据 npm 官方下载统计,@aws-lambda-powertools/jmespath 在 2026/10/08 – 2026/11/06 这 30 天内被下载 557,326 次,日均约 18,578 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@aws-lambda-powertools/jmespath 还在维护吗?

最新版本 2.36.0 发布于 2026/10/06(1 个月前);至今共发布 49 个版本,其中过去 12 个月发布了 11 个;首次发布于 2024/02/22。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。