You need to enable JavaScript to run this app. C#如何检查JSON中指定key/节点是否存在?
优惠活动
大模型
产品
解决方案
定价
更多

C#如何检查JSON中指定key/节点是否存在?

问题根因

你当前代码返回null的核心原因是JSON中AutomationFramework节点为数组类型,JSONPath语法规则下,未指定数组索引/通配符时无法直接定位数组内的子节点,因此你写的AutomationFramework.Technique.Available属于无效路径。

通用实现方案

你可以使用下方封装的方法,自动适配数组场景,传入原始路径即可返回节点是否存在的布尔值:

using Newtonsoft.Json.Linq;

public static bool IsJsonNodeExists(JObject jsonObj, string nodePath)
{
    // 优先查询原始路径(适配带索引的精确路径场景)
    var matchTokens = jsonObj.SelectTokens(nodePath, false);
    if (matchTokens != null && matchTokens.Any())
    {
        return true;
    }

    // 自动适配数组场景,生成带通配符的调整后路径
    var pathSegments = nodePath.Split('.');
    var adjustedPathSegments = new List<string>();
    JToken currentLevel = jsonObj;

    foreach (var seg in pathSegments)
    {
        // 当前节点是数组,自动加通配符匹配所有数组元素
        if (currentLevel is JArray currentArr)
        {
            adjustedPathSegments.Add("[*]");
            currentLevel = currentArr.FirstOrDefault();
            if (currentLevel == null)
            {
                return false;
            }
        }
        // 当前节点是对象,判断是否存在当前分段的属性
        if (currentLevel is JObject currentObj)
        {
            if (!currentObj.ContainsKey(seg))
            {
                return false;
            }
            adjustedPathSegments.Add(seg);
            currentLevel = currentObj[seg];
        }
    }

    // 用调整后的路径重新查询
    matchTokens = jsonObj.SelectTokens(string.Join(".", adjustedPathSegments), false);
    return matchTokens != null && matchTokens.Any();
}
使用示例
// 你的原有解析逻辑
JObject obj = JObject.Parse(ParseJson(@"C:\Test\Test.Config"));

// 检查第一个节点,自动适配数组结构
bool isFirstNodeExist = IsJsonNodeExists(obj, "AutomationFramework.Technique.Available");

// 检查第二个节点,直接匹配对象结构
bool isSecondNodeExist = IsJsonNodeExists(obj, "Verify.Customer");
说明
  • 如果需要精确匹配数组指定索引的节点,可以直接在路径中加索引,例如AutomationFramework[0].Technique.Available,方法会优先按原始路径查询
  • 方法默认只要数组中存在任意一个符合路径的节点,就返回True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 05:45:05