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

如何在Newtonsoft JObject中更新所有层级带指定前缀的键的值

JObject批量更新指定前缀键值的实现方案

你可以通过递归遍历JObject所有层级的属性,匹配前缀后统一赋值,以下是可直接运行的实现:

首先需要引入Newtonsoft.Json的命名空间:

using Newtonsoft.Json.Linq;

核心实现方法

public static void UpdateValuesByKeyPrefix(JObject targetObj, string keyPrefix, JToken newValue)
{
    // 转成List避免遍历过程中修改结构导致的枚举异常
    foreach (var property in targetObj.Properties().ToList())
    {
        // 递归遍历嵌套的JObject对象
        if (property.Value.Type == JTokenType.Object)
        {
            UpdateValuesByKeyPrefix((JObject)property.Value, keyPrefix, newValue);
        }
        // 匹配前缀后更新值,默认区分大小写
        if (property.Name.StartsWith(keyPrefix, StringComparison.Ordinal))
        {
            property.Value = newValue;
        }
    }
}

调用示例(对应你的测试场景)

// 你的示例JSON字符串
string jsonStr = @"{
  ""nameOne"": ""dave"",
  ""age"": 23,
  ""foo"": {
    ""nameTwo"": ""pete"",
    ""age"": 56
  }
}";

// 解析为JObject
JObject jObj = JObject.Parse(jsonStr);

// 统一将所有前缀为name的键的值修改为chris
UpdateValuesByKeyPrefix(jObj, "name", "chris");

// 输出修改后的结果
Console.WriteLine(jObj.ToString());

运行输出结果

{
  "nameOne": "chris",
  "age": 23,
  "foo": {
    "nameTwo": "chris",
    "age": 56
  }
}

补充说明

  • 如果需要忽略大小写匹配前缀,将StartsWith方法的第二个参数改为StringComparison.OrdinalIgnoreCase即可
  • 该方法支持任意层级的嵌套对象,也支持替换为数字、布尔、对象等任意类型的新值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:06:08