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

如何在C#中基于行首3字符规则将TXT转换为JSON?

C#实现大体积TXT按规则转JSON方案

针对大体积TXT文件转JSON的需求,核心是逐行处理避免内存溢出,同时根据行首3个字符匹配不同拆分规则。以下是完整实现方案:

1. 定义数据实体类

根据不同规则创建对应实体,示例字段可根据实际需求调整:

// 001道路信息(11项字段示例)
public class RoadInfo
{
    public string RoadId { get; set; }
    public string RoadName { get; set; }
    public string RoadType { get; set; }
    public string StartPoint { get; set; }
    public string EndPoint { get; set; }
    public decimal Length { get; set; }
    public decimal Width { get; set; }
    public string BuildYear { get; set; }
    public string MaintenanceUnit { get; set; }
    public string TrafficLevel { get; set; }
    public string Remark { get; set; }
}

// 004门牌号信息(9项字段示例)
public class HouseNumberInfo
{
    public string HouseId { get; set; }
    public string RoadCode { get; set; }
    public string HouseNo { get; set; }
    public string BuildingNo { get; set; }
    public string UnitNo { get; set; }
    public string FloorNo { get; set; }
    public string RoomNo { get; set; }
    public string ResidentCount { get; set; }
    public string PropertyUnit { get; set; }
}

2. 核心解析逻辑

实现按行首前缀匹配拆分规则的方法,这里以固定长度拆分为例(如果是分隔符拆分,替换为Split逻辑即可):

public static object ParseLine(string line)
{
    if (string.IsNullOrWhiteSpace(line) || line.Length < 3)
        return null;

    var prefix = line.Substring(0, 3);
    switch (prefix)
    {
        case "001":
            // 按固定长度拆分11项,示例长度需根据实际规则调整
            return new RoadInfo
            {
                RoadId = line.Substring(3, 10).Trim(),
                RoadName = line.Substring(13, 20).Trim(),
                RoadType = line.Substring(33, 5).Trim(),
                StartPoint = line.Substring(38, 20).Trim(),
                EndPoint = line.Substring(58, 20).Trim(),
                Length = decimal.TryParse(line.Substring(78, 8).Trim(), out var len) ? len : 0,
                Width = decimal.TryParse(line.Substring(86, 6).Trim(), out var wid) ? wid : 0,
                BuildYear = line.Substring(92, 4).Trim(),
                MaintenanceUnit = line.Substring(96, 30).Trim(),
                TrafficLevel = line.Substring(126, 3).Trim(),
                Remark = line.Substring(129).Trim()
            };
        case "004":
            // 按固定长度拆分9项,示例长度需根据实际规则调整
            return new HouseNumberInfo
            {
                HouseId = line.Substring(3, 12).Trim(),
                RoadCode = line.Substring(15, 10).Trim(),
                HouseNo = line.Substring(25, 8).Trim(),
                BuildingNo = line.Substring(33, 6).Trim(),
                UnitNo = line.Substring(39, 4).Trim(),
                FloorNo = line.Substring(43, 3).Trim(),
                RoomNo = line.Substring(46, 5).Trim(),
                ResidentCount = line.Substring(51, 4).Trim(),
                PropertyUnit = line.Substring(55).Trim()
            };
        default:
            // 处理未知前缀的行,可忽略或记录日志
            return null;
    }
}

3. 大文件读写与JSON输出

使用流操作逐行处理,避免一次性加载所有数据到内存:

using System.Text.Json;

public static void ConvertTxtToJson(string txtPath, string jsonPath)
{
    var options = new JsonSerializerOptions { WriteIndented = true };

    using var reader = new StreamReader(txtPath, Encoding.UTF8);
    using var writer = new StreamWriter(jsonPath, false, Encoding.UTF8);

    // 写入JSON数组开头
    writer.WriteLine("[");

    string line;
    bool isFirstItem = true;

    while ((line = reader.ReadLine()) != null)
    {
        var data = ParseLine(line);
        if (data == null)
            continue;

        // 处理数组逗号分隔
        if (!isFirstItem)
            writer.WriteLine(",");
        else
            isFirstItem = false;

        // 序列化当前对象并写入
        var json = JsonSerializer.Serialize(data, options);
        writer.Write(json);
    }

    // 写入JSON数组结尾
    writer.WriteLine();
    writer.WriteLine("]");
}

4. 关键注意事项

  • 内存优化:全程使用流操作,适合GB级大文件处理,避免内存溢出。
  • 编码适配:根据实际TXT文件编码调整StreamReader的编码参数(如Encoding.GB2312)。
  • 异常处理:可在循环中添加try-catch块,捕获解析或IO异常并记录日志,避免程序崩溃。
  • 规则扩展:后续新增前缀规则时,只需在ParseLine的switch中添加新分支即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 17:42:43