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

如何从JToken中筛选指定条件的Id字段存入List集合?

从JToken中筛选指定条件的Id存入列表的解决方案

问题原因

你当前的代码执行后返回所有Id,通常由以下两个常见问题导致:

  • 调用FindAll的节点错误:你没有指定在MySwitchInfo对应的数组节点下筛选,而是在JSON根节点直接调用筛选方法,会匹配到所有符合条件的子节点
  • 字段值读取方式不稳定:直接用ToString()获取on字段的值,如果JSON解析时该字段被识别为整型、布尔型等非字符串类型,ToString()的返回结果会和预期的"0"/"1"字符串不符,导致判断条件全部失效

正确实现方案

首先需要先定位到MySwitchInfo对应的JArray节点,再执行筛选,推荐使用更稳定的强类型取值方法Value<T>()读取字段值:

写法1:LINQ链式写法(更简洁)

// 先将你的JSON字符串解析为JObject对象
JObject root = JObject.Parse(你的JSON字符串);
List<string> idList = ((JArray)root["MySwitchInfo"])
    .Where(item => item.Value<string>("on") == "0")
    .Select(item => item.Value<string>("Id"))
    .ToList();

写法2:兼容你原有FindAll+ForEach的写法

JObject root = JObject.Parse(你的JSON字符串);
List<string> idList = new List<string>();
((JArray)root["MySwitchInfo"]).ToList()
    .FindAll(f => f.Value<string>("on") == "0")
    .ForEach(g => idList.Add(g.Value<string>("Id")));

额外优化建议

如果你的JSON中on字段的值可能存在前后空格,可以在判断时加Trim()避免匹配失败:

.Where(item => item.Value<string>("on").Trim() == "0")

以上代码依赖Newtonsoft.Json库,使用前需要引入using Newtonsoft.Json.Linq;命名空间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:57:01