C#中使用SelectToken按Id=2筛选JSON节点返回null问题咨询
问题排查与修正方案
故障根因
- Newtonsoft.Json 的JSONPath查询执行时会严格匹配值类型:你提供的JSON结构里,
Databases数组内每个元素的Id是整数数值类型(值为1、2、3,未被引号包裹),但你写的查询逻辑是将其与字符串值'2'做相等比较,两类值类型不匹配,无法命中对应节点,最终返回null。 - 表达式开头的
$根路径标识在SelectToken方法中可省略,不属于报错原因。
修正代码
去掉匹配值两侧的单引号,直接用数值和Id做相等判断,修正后的核心查询逻辑为:
JToken result = o.SelectToken("$.Databases[?(@.Id == 2)]");
补充说明:你提供的原始JSON存在语法不规范问题(每个数组对象最后一个属性后附带多余的尾随逗号),当前Newtonsoft.Json默认解析规则可兼容这种写法,但如果开启严格JSON校验模式会直接触发解析异常,建议在生成JSON时去掉多余逗号,保证结构合规。
内容的提问来源于stack exchange,提问作者Asit
相关产品推荐
相关产品推荐

