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

C#中如何修改JSON字符串指定层级的元素节点名称?

仅修改指定层级JSON节点名称的解决方案

问题场景

获取到如下JSON字符串:

{
  "DataKEY": [
    {
      "value": {
        "timestamp": "2022-10-26T05:00:00Z",
        "value": 0.0
      }
    },
    {
      "value": {
        "timestamp": "2022-10-26T06:00:00Z",
        "value": 0.0
      }
    }
  ]
}

需要将DataKEY数组内第一层的value节点名称改为KEY,但直接使用string.Replace("value", "KEY")会同时替换内层的value节点,导致错误结果。需要精准修改指定层级的节点名称,最终得到:

{
  "DataKEY": [
    {
      "KEY": {
        "timestamp": "2022-10-26T05:00:00Z",
        "value": 0.0
      }
    },
    {
      "KEY": {
        "timestamp": "2022-10-26T06:00:00Z",
        "value": 0.0
      }
    }
  ]
}

解决方案

通过JSON解析库精准定位层级节点进行修改,避免字符串替换的盲目性,以下是两种常用实现方式:

方式一:使用.NET官方库System.Text.Json

适用于.NET Core/.NET 5及以上版本,无需额外安装包:

using System;
using System.Text.Json;

var originalJson = @"
{
  ""DataKEY"": [
    {
      ""value"": {
        ""timestamp"": ""2022-10-26T05:00:00Z"",
        ""value"": 0.0
      }
    },
    {
      ""value"": {
        ""timestamp"": ""2022-10-26T06:00:00Z"",
        ""value"": 0.0
      }
    }
  ]
}";

using JsonDocument doc = JsonDocument.Parse(originalJson);
JsonElement root = doc.RootElement;

using var writer = new Utf8JsonWriter(Console.OpenStandardOutput(), new JsonWriterOptions { Indented = true });
writer.WriteStartObject();

foreach (JsonProperty prop in root.EnumerateObject())
{
    writer.WritePropertyName(prop.Name);
    if (prop.Name == "DataKEY" && prop.Value.ValueKind == JsonValueKind.Array)
    {
        writer.WriteStartArray();
        foreach (JsonElement item in prop.Value.EnumerateArray())
        {
            writer.WriteStartObject();
            foreach (JsonProperty itemProp in item.EnumerateObject())
            {
                // 仅替换数组内第一层的"value"为"KEY"
                writer.WritePropertyName(itemProp.Name == "value" ? "KEY" : itemProp.Name);
                itemProp.Value.WriteTo(writer);
            }
            writer.WriteEndObject();
        }
        writer.WriteEndArray();
    }
    else
    {
        prop.Value.WriteTo(writer);
    }
}

writer.WriteEndObject();

方式二:使用Newtonsoft.Json(Json.NET)

需先通过NuGet安装Newtonsoft.Json包:

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

var originalJson = @"
{
  ""DataKEY"": [
    {
      ""value"": {
        ""timestamp"": ""2022-10-26T05:00:00Z"",
        ""value"": 0.0
      }
    },
    {
      ""value"": {
        ""timestamp"": ""2022-10-26T06:00:00Z"",
        ""value"": 0.0
      }
    }
  ]
}";

JObject jsonObj = JObject.Parse(originalJson);
JArray dataArray = (JArray)jsonObj["DataKEY"];

foreach (JObject item in dataArray.Children<JObject>())
{
    if (item.ContainsKey("value"))
    {
        var valueToken = item["value"];
        item.Remove("value");
        item.Add("KEY", valueToken);
    }
}

string modifiedJson = jsonObj.ToString(Formatting.Indented);
Console.WriteLine(modifiedJson);

两种方式均通过解析JSON结构,精准定位到DataKEY数组内的第一层value节点进行修改,不会影响内层的value键,确保结果符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:55:26