You need to enable JavaScript to run this app. C#中如何将带分隔符的字符串转换为指定格式的JSON字符串
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何将带分隔符的字符串转换为指定格式的JSON字符串

C# 竖线分隔字符串转目标JSON的实现方法

现有代码的问题根源

之前的拼接逻辑生成的结果不符合要求,主要是三个核心问题:

  • 不符合JSON语法规范:标准JSON要求所有键名、字符串类型的字段值必须被双引号包裹,之前的代码既没有给键名加双引号,也没有给字段值加双引号,还在键名前后留了多余空格,生成的内容不是合法JSON
  • 字段映射覆盖不全:只拼接了compCode、accountYear两个字段,没有覆盖剩余6个目标字段
  • 输入拆分的细节处理缺失:原始输入字符串末尾自带一个|分隔符,直接用默认逻辑拆分,会生成包含空字符串的冗余数组,后续取数容易出现错位、空值的问题

正确实现思路

1. 拆分输入的基础处理

拆分时指定移除拆分后产生的空元素,避免末尾分隔符带来的冗余空值:

// 拆分后得到长度为8的有效数组,索引0-7对应所有有效输入值
string[] inputArray = myString.Split('|', StringSplitOptions.RemoveEmptyEntries);

按照你的目标映射规则,数组索引和字段的对应关系为:

  • 索引0(值KTC)→ compCode
  • 索引1(值2020)→ accountYear
  • 索引2(值MPD)→ shipmentNumber
  • 索引3(值18/01/2021)→ shipmentDate
  • 索引4(值I)→ shipmentType
  • 按业务规则映射值M → shipmentCategory(注:目标JSON里该字段值为固定的M,和输入数组的第5位值O不一致,属于业务转换规则)
  • 索引6(值B)→ fromLevelCode
  • 索引7(值ALST)→ fromLocationCode

2. 两种可选的JSON生成方式

方式A:手动拼接合规JSON(适合简单无特殊字符的场景)

严格按照JSON语法补全所有双引号,不要留多余空格,注意在C#字符串里表示双引号需要用"转义:

string convertedJsonString = "{" +
    $"\"compCode\":\"{inputArray[0]}\"," +
    $"\"accountYear\":\"{inputArray[1]}\"," +
    $"\"shipmentNumber\":\"{inputArray[2]}\"," +
    $"\"shipmentDate\":\"{inputArray[3]}\"," +
    $"\"shipmentType\":\"{inputArray[4]}\"," +
    "\"shipmentCategory\":\"M\"," +
    $"\"fromLevelCode\":\"{inputArray[6]}\"," +
    $"\"fromLocationCode\":\"{inputArray[7]}\"" +
"}";

方式B:使用内置序列化工具生成JSON(更稳定,推荐生产环境使用)

手动拼接JSON的缺陷是如果字段值包含双引号、换行符等特殊字符,会直接生成非法JSON。更稳妥的方式是定义和目标结构匹配的实体类,赋值后用.NET内置的System.Text.Json序列化,完全避免格式问题:

// 定义匹配目标JSON结构的实体
public class ShipmentPayload
{
    public string compCode { get; set; }
    public string accountYear { get; set; }
    public string shipmentNumber { get; set; }
    public string shipmentDate { get; set; }
    public string shipmentType { get; set; }
    public string shipmentCategory { get; set; }
    public string fromLevelCode { get; set; }
    public string fromLocationCode { get; set; }
}

// 赋值业务数据
string[] inputArray = myString.Split('|', StringSplitOptions.RemoveEmptyEntries);
var payload = new ShipmentPayload
{
    compCode = inputArray[0],
    accountYear = inputArray[1],
    shipmentNumber = inputArray[2],
    shipmentDate = inputArray[3],
    shipmentType = inputArray[4],
    shipmentCategory = "M",
    fromLevelCode = inputArray[6],
    fromLocationCode = inputArray[7]
};

// 直接序列化得到完全符合规范的JSON字符串
string convertedJsonString = System.Text.Json.JsonSerializer.Serialize(payload);

常见踩坑提醒

  • 拼接JSON时不要用无意义的逐字字符串硬拼,很容易漏写转义的双引号
  • 拆分带末尾分隔符的字符串时,一定要加上StringSplitOptions.RemoveEmptyEntries参数,避免空元素导致的索引错位
  • JSON语法对格式要求严格,键和字符串值的双引号是强制要求,没有引号的内容会被JSON解析器判定为非法格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 08:36:07