如何使用JSONPath筛选对应当前周的JSON对象?
用JSONPath筛选对应当前周的JSON对象
问题背景
给定按周划分的JSON数组:
[ { "valutakode": "EUR", "valutabeskrivelse": "EURO", "valutakurs": "10,390", "omregningsenhet": 1, "fomdato": "2022-10-31", "tomdato": "2022-11-06" }, { "valutakode": "EUR", "valutabeskrivelse": "EURO", "valutakurs": "10,180", "omregningsenhet": 1, "fomdato": "2022-11-07", "tomdato": "2022-11-13" } ]
需要筛选出与当前周对应的JSON对象,能否通过JSONPath实现?
实现方案
可以实现,但效果取决于你使用的JSONPath引擎(不同版本对日期处理的支持差异较大):
1. 支持日期函数/动态参数的JSONPath引擎(如Jayway JsonPath)
这类引擎允许直接进行日期区间比较,甚至支持动态获取当前日期。
- 核心思路:检查当前日期是否落在目标对象的
fomdato(起始日期)和tomdato(结束日期)之间 - 示例表达式:
其中$[?(@.fomdato <= $currentDate && @.tomdato >= $currentDate)]$currentDate可以替换为当前日期的字符串(格式需与JSON中一致,如"2022-11-08"),部分引擎还支持直接调用日期函数(如Jayway的$now()),但需注意将函数返回值转换为YYYY-MM-DD格式后再比较。
2. 基础版JSONPath引擎(无日期处理支持)
这类引擎仅支持基础的字符串和数值比较,无法动态获取当前日期,需手动传入当前周的关键参数:
- 方式一:直接匹配当前周的起止日期
$[?(@.fomdato == "2022-11-07" && @.tomdato == "2022-11-13")] - 方式二:传入当前日期,筛选包含该日期的周对象
$[?(@.fomdato <= "2022-11-08" && @.tomdato >= "2022-11-08")]
注意事项
- 必须保证JSON中的日期格式(
YYYY-MM-DD)与筛选时传入的日期格式完全一致,否则字符串比较会失效 - 不同JSONPath引擎的语法细节可能有差异(比如部分引擎要求字符串用单引号),需结合你使用的具体工具或库调整表达式
内容的提问来源于stack exchange,提问作者Christian Rockrohr
相关产品推荐
相关产品推荐

