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

如何在JSONPath中匹配特定值?附实际场景查询示例

JSONPath特定值匹配解答

基于你提供的示例JSON数据测试,你编写的两条查询语句在支持正则匹配的标准JSONPath实现中均可正常运行,以下是详细说明及优化方案:

注意:正则相关写法仅在支持正则扩展的JSONPath实现中生效,部分轻量解析器(如部分Java、Python的简易JSONPath库)可能不支持该语法。

现有写法验证

  • 第一条查询$.phoneNumbers[?(@.type=~/iPhone/i)].number:可正确匹配type为iPhone(不区分大小写)的号码,返回结果为"0123-4567-8888"
  • 第二条查询$..number[?(@=~/.*88/i)]:可匹配到包含连续88的号码,返回结果同上

优化/替代实现方案

1. 查询类型为iPhone的号码

如果不需要大小写模糊匹配,推荐使用等值判断写法,兼容性更强,适配不支持正则的轻量JSONPath解析器:

$.phoneNumbers[?(@.type == 'iPhone')].number

如果确实需要适配大小写不同的type取值(如iphone、IPhone等),保留原有正则写法即可。

2. 查询所有以88结尾的号码

原有正则写法未添加结尾锚定,存在误匹配风险:如果号码中间出现连续88也会被命中。优化后的正则写法如下,添加$锚定匹配字符串末尾,同时去掉无用的大小写匹配修饰符i:

$..number[?(@ =~ /.*88$/)]

如果你的运行环境支持JSONPath扩展函数,也可以用更直观的endsWith写法:

$..number[?(endsWith(@, '88'))]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:27:03