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

如何仅用SelectTokens替代Where方法筛选JSON中的list1元素

解决方案

正确的JSONPath表达式

要直接用SelectTokens筛选出符合条件的list1元素,你需要调整JSONPath,让它定位到list1层级并添加过滤条件,而非深入到list2。正确的表达式如下:

var test2 = jsonVal.SelectTokens("data.list1[?(@.list2[*].value > 15)]");

这个表达式的逻辑是:遍历data.list1下的所有元素,仅保留那些自身包含的list2子元素中存在value>15项的list1元素,和你原代码用Where筛选的结果完全一致。

将查询的特定部分存入变量

如果要把查询中的固定片段(比如过滤条件)提取成变量,直接拆分JSONPath字符串即可:

// 提取筛选条件部分为变量
var listFilter = "[?(@.list2[*].value > 15)]";
// 拼接完整路径并调用SelectTokens
var test2 = jsonVal.SelectTokens($"data.list1{listFilter}");

你也可以拆分更细的片段,比如把基础路径单独存储:

var basePath = "data.list1";
var listFilter = "[?(@.list2[*].value > 15)]";
var test2 = jsonVal.SelectTokens($"{basePath}{listFilter}");

你之前写法的问题

你之前使用的data.list1[*].list2[?(@.value > 15)]是直接定位到符合条件的list2子元素,返回的是list2层级的对象,而非你需要的list1父元素,这就是为什么只能获取到匹配的list2项,而非对应的list1元素。

内容的提问来源于stack exchange,提问作者Anıl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 02:22:06