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

如何在C#中将分隔符格式的DataRow转换为键值对结构?

解决方案:C# 转换DataRow风格的JSON为键值对数组

我来帮你搞定这个转换需求!核心思路是先提取第一行的列名,然后遍历后续每一行的数据,把每个值和对应的列名映射成键值对对象,最后整理成目标格式的JSON。

步骤分解:

  • 解析原始JSON:用C#常用的Json.NET(Newtonsoft.Json)库把输入的JSON字符串反序列化为可操作的对象。
  • 提取列名列表:从第一个myRow值里按|分割得到所有列名。
  • 遍历生成键值对:对每一行后续的myRow,同样按|分割得到值数组,再和列名一一对应构建键值对字典。
  • 序列化回目标JSON:把生成的键值对数组转成你需要的JSON格式。

完整代码实现:

首先确保你安装了Json.NET NuGet包:

Install-Package Newtonsoft.Json

然后是具体代码:

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

class Program
{
    static void Main(string[] args)
    {
        // 替换成你的原始JSON字符串
        string originalJson = @"
        { 
            ""DynamicColumnsList"": [ 
                { ""myRow"":""Title|KeyQuestion|OfferingBanner|OfferingOverview|Image_x0020_Icon|KeyContacts|KeyContacts_x003a_ID|KeyInvestmentAreas|KeyIssuesMarketDrivers|KeyServices|TypicalBuyers|AdditionalColumn1|Base64Image|Base64Banner|FSOCrossSector|ID"" }, 
                { ""myRow"":""BigBetsTestTier1|SomeData|SomeData|SomeData|SomeData|SomeData|SomeData|SomeData|SomeData|SomeData|SomeData|SomeData|SomeData|SomeData|SomeData|14"" },
                { ""myRow"":""SecondTitle|OtherData|OtherData|OtherData|OtherData|OtherData|OtherData|OtherData|OtherData|OtherData|OtherData|OtherData|OtherData|OtherData|OtherData|15"" }
            ] 
        }";

        // 反序列化为匿名类型,灵活处理动态结构
        var originalData = JsonConvert.DeserializeAnonymousType(originalJson, new
        {
            DynamicColumnsList = new List<Dictionary<string, string>>()
        });

        // 提取第一行的列名
        var columnNames = originalData.DynamicColumnsList[0]["myRow"].Split('|');

        // 处理后续数据行
        var resultRows = new List<Dictionary<string, string>>();
        foreach (var row in originalData.DynamicColumnsList.Skip(1))
        {
            var values = row["myRow"].Split('|');
            // 用Zip方法把列名和值一一配对生成字典
            var keyValueRow = columnNames.Zip(values, (col, val) => new { Col = col, Val = val })
                                        .ToDictionary(kv => kv.Col, kv => kv.Val);
            resultRows.Add(keyValueRow);
        }

        // 构建最终的JSON结构
        var result = new
        {
            DynamicColumnsList = resultRows
        };

        // 输出格式化后的目标JSON
        string targetJson = JsonConvert.SerializeObject(result, Formatting.Indented);
        Console.WriteLine(targetJson);
    }
}

代码说明:

  • 匿名类型反序列化:不用提前定义实体类,快速适配这种动态列名的场景。
  • Zip方法:高效将列名数组和值数组按位置配对,一行代码生成键值对字典。
  • Skip(1):跳过第一行列名行,只处理实际数据行。
  • 格式化输出:用Formatting.Indented生成和你示例一致的可读性强的JSON。

运行后你会得到完全符合需求的输出格式,哪怕数据超过10行也能轻松处理,性能完全够用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:49:57