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

如何修改C#递归遍历JObject逻辑,仅检测同层级title重复

仅检测JObject同一层级节点的title字段重复(Newtonsoft.Json实现)

核心思路很明确:放弃全局收集所有title的递归方式,改为逐层级校验——只在当前节点的children数组范围内检查同级节点的title是否重复,校验完当前层级后,再递归处理每个子节点的children数组,完全不跨层级比对。

实现代码

using Newtonsoft.Json.Linq;
using System.Collections.Generic;
using System.Linq;

public static class JObjectTitleChecker
{
    // 检查所有层级的同级节点title重复,返回重复的title列表(每个层级的重复项单独记录)
    public static List<string> CheckSameLevelTitleDuplicates(JObject root)
    {
        var duplicateTitles = new List<string>();
        
        // 处理根节点的子节点层级
        CheckChildrenLevel(root, duplicateTitles);
        
        return duplicateTitles;
    }

    private static void CheckChildrenLevel(JToken parentNode, List<string> duplicateTitles)
    {
        // 获取当前节点的children数组
        var children = parentNode["children"] as JArray;
        if (children == null || children.Count == 0)
            return;

        // 提取当前层级所有节点的有效title值
        var levelTitles = children
            .Select(child => child["title"]?.ToString())
            .Where(title => !string.IsNullOrEmpty(title))
            .ToList();

        // 筛选当前层级重复的title
        var duplicates = levelTitles
            .GroupBy(t => t)
            .Where(g => g.Count() > 1)
            .Select(g => g.Key)
            .Distinct()
            .ToList();

        if (duplicates.Any())
        {
            duplicateTitles.AddRange(duplicates.Select(t => $"同级节点重复title: {t}"));
        }

        // 递归处理每个子节点的下一级层级
        foreach (var child in children)
        {
            CheckChildrenLevel(child, duplicateTitles);
        }
    }
}

关键逻辑说明

  • 层级隔离:每次仅针对当前父节点下的children数组做校验,所有重复判断都局限在该层级内,不会跨层级比对不同节点的title。
  • 递归向下遍历:当前层级校验完成后,再逐个处理子节点的children数组,确保每个层级都被独立检查。
  • 空值容错:自动过滤没有title字段或title为空的节点,避免无效值干扰校验结果。

使用示例

假设你有如下JSON结构:

{
  "title": "根节点",
  "children": [
    {"title": "节点A", "children": [{"title": "节点A"}]},
    {"title": "节点B"},
    {"title": "节点A"}
  ]
}

调用CheckSameLevelTitleDuplicates后,会检测到根节点子层级中的"节点A"重复,而子节点内部的"节点A"与根层级的"节点A"属于不同层级,不会被判定为重复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 07:48:10