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

如何使用XPATH/JSONPATH筛选名称为forecast_XXX的JSON对象?

如何用JSONPath/XPath筛选以forecast_XXX命名的JSON对象

嘿,我来帮你搞定这个筛选需求!针对你给出的JSON结构,我分两种情况给你讲清楚——**JSONPath(处理JSON的首选)和XPath(需要适配JSON场景)**的实现方式:

一、用JSONPath筛选(推荐)

JSONPath是专门为JSON设计的查询语言,语法更贴合JSON结构。要筛选所有以forecast_开头、后面跟数字(比如forecast_1、forecast_2)的顶层对象,你可以用带正则匹配的过滤表达式:

通用表达式(适配多数JSONPath实现)

$.*[?(@property =~ /^forecast_\d+$/)]

表达式拆解:

  • $:代表JSON的根节点
  • .*:匹配根节点下的所有属性(也就是所有顶层键值对)
  • [?()]:过滤条件,只保留满足括号内规则的项
  • @property:指代当前属性的名称(有些JSONPath实现用@key,比如Jayway JSONPath,注意区分)
  • =~ /^forecast_\d+$/:用正则匹配属性名,^forecast_\d+$表示“以forecast_开头,后面跟着一个或多个数字,直到结尾”

针对你给出的JSON示例

这个表达式会精准返回forecast_1对应的整个对象:

{
  "country": "Rwanda",
  "forecast_date": "2018-03-20",
  "province": "Kigali City",
  "district": "Kigali",
  "morning": {...},
  "afternoon": {...}
}

二、用XPath筛选(需适配JSON场景)

XPath原本是为XML设计的,要处理JSON的话,通常需要两种方式:要么把JSON转换成XML结构,要么使用支持JSON的XPath 3.1及以上版本。

方式1:XPath 3.1+直接处理JSON

如果你的工具支持XPath 3.1(比如Saxon),可以用以下表达式:

json-doc('your-json-file.json')?*[matches(node-name(.), '^forecast_\d+$')]
  • json-doc():加载指定的JSON文件
  • ?*:选择JSON顶层的所有成员
  • matches(node-name(.), '^forecast_\d+$'):匹配成员名称是否符合正则规则

方式2:先转XML再用XPath筛选

如果先把JSON转换成XML(比如forecast_1会变成<forecast_1>元素),可以用更基础的XPath表达式:

/*[starts-with(local-name(), 'forecast_')]
  • /*:选择XML根节点下的所有子元素
  • starts-with(local-name(), 'forecast_'):筛选出名称以forecast_开头的元素

注意事项

  • 不同JSONPath工具的语法细节可能有差异,比如Jayway JSONPath用@key代替@property,表达式会变成$.*[?(@key =~ /^forecast_\d+$/)],使用前最好确认工具的文档。
  • 如果forecast_XXX后面的后缀不是数字(比如字母),可以把正则改成/^forecast_.+$/,匹配任意后缀。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:51:28