You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python的jmespath.search方法中实现变量替换

JMESPath 变量替换推荐实现方案

方案1:原生变量注入(官方推荐)

JMESPath 原生支持通过 search 方法的第三个 vars 参数传递外部变量,不需要手动拼接查询字符串,完全规避转义错误风险:

import jmespath

image_id = "ami-056c679fab9e48d8a"
print(jmespath.search(
    "Reservations[].Instances[?ImageId != `$target_ami`].{ InstanceName: Tags[?Key == `Name`]|[0].Value, ImageId: ImageId, PrivateDNSName: PrivateDnsName, PrivateIpAddress: PrivateIpAddress}",
    response,
    vars={"target_ami": image_id}
))

说明:在查询表达式中以 $变量名 格式引用传入的变量即可,变量值会自动适配类型,不需要手动加反引号包裹,也不用处理特殊字符转义。

方案2:Python 字符串格式化(不推荐)

如果一定要用字符串替换的方式实现,需要注意格式化语法的转义规则:

image_id = "ami-056c679fab9e48d8a"
# f-string 实现示例
print(jmespath.search(
    f"Reservations[].Instances[?ImageId != `{image_id}`].{{ InstanceName: Tags[?Key == `Name`]|[0].Value, ImageId: ImageId, PrivateDNSName: PrivateDnsName, PrivateIpAddress: PrivateIpAddress}}",
    response
))

注意事项:

  • 查询语句中原有的 JMESPath 大括号需要双写转义,避免被 Python 识别为格式化占位符
  • 如果 image_id 包含反引号、引号等特殊字符,会直接导致查询语法错误,兼容性差

内容的提问来源于stack exchange,提问作者Raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 23:09:00