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

如何使用C#移除JSON中值为空、'-'、'N/A'的键

解决方法

你原来的代码仅处理了第一个空字符串匹配项,且未覆盖所有目标值和嵌套层级,以下是基于Newtonsoft.Json的正确实现:

核心思路

递归遍历JSON的所有层级,先收集所有值为''、'-'或'N/A'的JObject属性,最后统一移除这些属性(避免遍历过程中修改集合引发异常)。

完整代码实现

using Newtonsoft.Json.Linq;

public static void RemoveTargetProperties(JToken token)
{
    if (token.Type == JTokenType.Object)
    {
        var propsToRemove = new List<JProperty>();
        foreach (JProperty prop in token.Children<JProperty>())
        {
            // 递归处理子节点,确保深层属性被检查
            RemoveTargetProperties(prop.Value);
            
            // 仅检查字符串类型的值,避免误删数字、布尔等类型属性
            if (prop.Value.Type == JTokenType.String)
            {
                string val = prop.Value.Value<string>();
                if (val == "" || val == "-" || val == "N/A")
                {
                    propsToRemove.Add(prop);
                }
            }
        }
        
        // 统一移除符合条件的属性
        foreach (var prop in propsToRemove)
        {
            prop.Remove();
        }
    }
    else if (token.Type == JTokenType.Array)
    {
        // 如果需要移除数组中值为目标值的元素,可取消下方注释
        // var itemsToRemove = token.Children().Where(t => t.Type == JTokenType.String && 
        //     (t.Value<string>() == "" || t.Value<string>() == "-" || t.Value<string>() == "N/A")).ToList();
        // foreach (var item in itemsToRemove)
        // {
        //     item.Remove();
        // }
        foreach (JToken item in token.Children())
        {
            RemoveTargetProperties(item);
        }
    }
}

// 使用示例
string jsonString = @"{""name"": {""first"": ""Robert"",""middle"": """",""last"": ""Smith""},""age"": 25,""DOB"": ""-"",""hobbies"": [""running"",""coding"",""-""],""education"": {""highschool"": ""N/A"",""college"": ""Yale""}}";
JObject json = JObject.Parse(jsonString);
RemoveTargetProperties(json);
string cleanedJson = json.ToString();

代码说明

  1. 递归遍历:覆盖所有嵌套的JObject和数组,确保深层属性也能被检查处理
  2. 先收集后移除:避免遍历JObject属性时直接修改集合导致的异常
  3. 类型校验:只处理字符串类型的值,不会误删数字(如示例中的age:25)等其他类型属性
  4. 可选数组处理:若需要移除数组内符合条件的元素,可取消对应代码块的注释

处理后你的示例JSON会变为:

{"name":{"first":"Robert","last":"Smith"},"age":25,"hobbies":["running","coding","-"],"education":{"college":"Yale"}}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:45:30