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

Newtonsoft 13.0.1 SelectTokens JSONPath过滤无返回问题咨询

问题原因

Newtonsoft.Json 13.0.1的JSONPath实现和部分在线测试工具的实现存在语法差异,你使用的$..myObject[?(@.myArray)]写法不符合Newtonsoft的解析规则:

  • 该写法中[?(@.myArray)]会被Newtonsoft识别为对myObject的子元素做过滤,仅当myObject是数组类型时才会遍历子元素执行校验
  • 你的myObject是对象类型,没有可遍历的子元素,因此过滤结果为空

写法修正

根据你的需求可以选择对应兼容Newtonsoft的写法:

  1. 如果你要查找所有名称为myObject、且自身带有myArray属性的节点(你的示例数据中会返回2个匹配节点:根节点下的第一层myObject、嵌套在第一层myObject内的第二层myObject),使用:
data.SelectTokens("$..myObject[?(@.myArray != null)]")

如果上述写法仍然不生效,可以改用属性索引器写法提升兼容性:

data.SelectTokens("$..myObject[?(@['myArray'] != null)]")
  1. 如果你要查找所有带有myObject.myArray属性的节点(你的示例数据中仅根节点符合,和你预期的1个返回结果一致),你提到的$..[?(@.myObject.myArray)]写法可以直接使用,兼容Newtonsoft实现:
data.SelectTokens("$..[?(@.myObject.myArray != null)]")

注意:Newtonsoft的存在性校验建议显式写!= null,部分版本对简写的?(@.myArray)支持度不足。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:18:02