如何编写LINQ查询从JSON文件提取validation中的所有Guid列表
获取JSON中validation的所有Guid列表的LINQ实现
首先注意你的代码里有个小错误:JSON里的节点是"validation",不是"validate",得先修正这个匹配的Key值。
假设你用的是Newtonsoft.Json(Json.NET)解析JSON,以下是完整的LINQ查询实现:
步骤1:解析JSON并获取validation节点
先把JSON字符串解析为JObject,再提取出validation相关的部分:
using Newtonsoft.Json.Linq; // 解析JSON字符串 var jsonObj = JObject.Parse(你的JSON字符串); // 获取validation节点,两种方式选其一 var validationNode = jsonObj["validation"]; // 或者用你原有的方式修正Key后获取 // var validationNode = jsonObj.Properties().FirstOrDefault(x => x.Key == "validation")?.Value;
步骤2:用LINQ提取所有Guid
从validation的options中遍历每个选项,匹配extras中对应的id值,收集为Guid列表:
// 提取options列表与extras字典 var options = validationNode["options"].ToObject<List<string>>(); var extrasDict = validationNode["extras"].ToObject<Dictionary<string, JObject>>(); // 获取字符串格式的Guid列表 var guidStrings = options .Where(opt => extrasDict.ContainsKey(opt)) // 过滤掉extras中不存在的选项 .Select(opt => extrasDict[opt]["id"].ToString()) .ToList(); // 转换成Guid类型的列表(带格式校验) var guidList = options .Where(opt => extrasDict.ContainsKey(opt) && Guid.TryParse(extrasDict[opt]["id"]?.ToString(), out _)) .Select(opt => Guid.Parse(extrasDict[opt]["id"].ToString())) .ToList();
简化链式写法
如果不想单独提取中间变量,也可以直接链式编写LINQ:
var guidList = jsonObj["validation"]["options"] .Select(opt => opt.ToString()) .Where(opt => jsonObj["validation"]["extras"][opt] != null) .Select(opt => Guid.Parse(jsonObj["validation"]["extras"][opt]["id"].ToString())) .ToList();
注意事项
- 必须确保
options中的每个选项在extras中都有对应条目,否则会触发KeyNotFoundException,建议保留Where过滤逻辑。 - 若
id可能存在无效Guid格式的情况,一定要加上Guid.TryParse的校验,避免抛出格式异常。
内容的提问来源于stack exchange,提问作者user768853
相关产品推荐
相关产品推荐

