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

如何编写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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:42:40