使用SelectToken查询JSON遇空引用异常,如何筛选指定节点?
JSON节点提取空引用异常解决方法
错误原因分析
- 路径冗余:已经通过
JObject.Parse(json)["Tarih_Date"]定位到Tarih_Date节点,SelectToken里的$.Currency无需再加根路径符号$,应使用相对路径。 - 特殊属性名处理:属性名
@CurrencyCode包含JSONPath特殊字符@,必须用单引号包裹明确标识为属性名,否则会被当作JSONPath的特殊语法解析。 - 多余节点访问:
SelectToken返回的就是符合条件的Currency节点本身,后续无需再调用["Currency"],否则会访问不存在的子节点触发空引用。
修正后的代码
// 解析JSON并定位到Tarih_Date节点 var tarihiDateNode = JObject.Parse(json)["Tarih_Date"]; // 用正确的JSONPath筛选目标Currency节点 var targetCurrency = tarihiDateNode.SelectToken("Currency[?(@['@CurrencyCode']=='USD')]"); // 空安全处理,避免无匹配时抛出异常 string result = targetCurrency?.ToString() ?? string.Empty;
补充说明
- 加入
?.空传播运算符和??空合并运算符,即使没有匹配到符合条件的节点,也不会抛出空引用异常,而是返回空字符串。 - 对于带特殊字符的属性名,使用
@['属性名']的格式是JSONPath中最可靠的访问方式。
内容的提问来源于stack exchange,提问作者Tim's
相关产品推荐
相关产品推荐

