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

如何编写JMESPath表达式选择含括号的字典键?

解决JMESPath匹配含特殊字符键的问题

你的问题出在键名包含()、{}这类JMESPath语法中的特殊字符,直接写会被解析器误判成语法结构,导致报错。修正方法很简单:用方括号包裹键名,同时给键名加上双引号,让JMESPath把它当作普通字符串键处理。

正确的JMESPath表达式

["restrictions({\"basketItems\":[],\"endDateTime\":\"\",\"startDateTime\":\"\"})"]

在Python中使用示例

如果用Python的jmespath库,可以这样写(两种方式都可行):

import jmespath

product_data = {
    'restrictions({"basketItems":[],"endDateTime":"","startDateTime":""})': [
        {'__typename': 'ProductRestrictionType', 'type': 'RdgDateRange', 'isViolated': False, 'message': 'Price Cuts - Was £0.50\n'},
        {'__typename': 'ProductRestrictionType', 'type': 'ExcludedProduct', 'isViolated': True, 'message': 'This product is unavailable'}
    ]
}

# 方式1:表达式用单引号包裹,内部双引号无需转义
result1 = jmespath.search('["restrictions({"basketItems":[],"endDateTime":"","startDateTime":""})"]', product_data)

# 方式2:表达式用双引号包裹,内部双引号转义
result2 = jmespath.search("[\"restrictions({\\\"basketItems\\\":[],\\\"endDateTime\\\":\\\"\\\",\\\"startDateTime\\\":\\\"\\\"})\"]", product_data)

print(result1)  # 输出对应的值列表

原理说明

JMESPath的点语法(如obj.key)只适用于符合标识符规则的键名(不含特殊字符、空格,不以数字开头)。当键名包含特殊字符时,必须切换到方括号索引语法,并用引号明确标记这是一个字符串键,避免解析器混淆语法元素和键名本身。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 11:32:09