C#如何将SQL表多列逗号分隔字符串转换为目标JSON结构
实现方案
你只需要将两列的逗号分隔值按下标对齐拆分,组装为对应对象结构后序列化即可,以下是基于ASP.NET Core内置System.Text.Json的可直接复用的实现代码,无需引入第三方依赖:
- 先读取数据库中单行的两个原始字段值
- 按逗号拆分两个字段,做长度校验避免数据错位、索引越界
- 按下标一一对应组装明细项,包装为目标结构后序列化
using System; using System.Collections.Generic; using System.IO; using System.Text.Json; // 替换为你从数据库读取到的实际原始值 string column1FromDb = "12,13"; string column2FromDb = "abc,xyx"; // 拆分字符串,自动过滤空条目、去除值前后空格 string[] col1Values = column1FromDb.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); string[] col2Values = column2FromDb.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); // 校验两列拆分后长度一致,避免数据错位 if (col1Values.Length != col2Values.Length) { throw new InvalidDataException("两列逗号分隔数据条目数不匹配,无法组装"); } // 组装明细列表 var detailList = new List<object>(); for (int i = 0; i < col1Values.Length; i++) { detailList.Add(new { column1 = col1Values[i], column2 = col2Values[i] }); } // 包装为最终输出结构 var outputObj = new { Details = detailList }; // 序列化为带缩进的JSON格式,直接返回即可 var jsonSetting = new JsonSerializerOptions { WriteIndented = true }; string targetJson = JsonSerializer.Serialize(outputObj, jsonSetting);
运行上述代码生成的JSON和你给出的期望结构完全一致:
{ "Details": [ { "column1": "12", "column2": "abc" }, { "column1": "13", "column2": "xyx" } ] }
如果你项目使用Newtonsoft.Json做序列化,拆分、组装逻辑完全不变,只需要将最后序列化步骤替换为
JsonConvert.SerializeObject(outputObj, Formatting.Indented)即可。
注意事项
- 拆分时加
StringSplitOptions.TrimEntries是为了兼容原始数据逗号前后带空格的场景,比如"12, 13"这类值也能正常解析 - 长度校验逻辑不要省略,否则当某一列多一个/少一个分隔值时,会出现数据错位的问题
- 如果你的业务数据中本身包含逗号(比如值为带逗号的文本),不要直接用普通Split拆分,需要先根据你的转义规则调整拆分逻辑
内容的提问来源于stack exchange,提问作者atc
相关产品推荐
相关产品推荐

