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

如何为JSON文件添加']'或移除末尾','并解决解析报错问题?

修复不规范JSON的解析问题

问题情况

手里的JSON文件有两种格式毛病:

  • 末尾没加闭合方括号]
  • 有些文件最后是逗号,,不是]
    用C#的JsonDocument.ParseAsync解析时直接触发异常,本来想在catch块里读文件改格式再重新解析,结果又报这个错:System.Text.Json.JsonReaderException: ']' is an invalid start of a value. LineNumber: 0 | BytePositionInLine: 0

为啥会报错?

核心问题是第一次用JsonDocument.ParseAsync读流的时候,已经把流读到末尾了,后面再用StreamReader读这个流,读出来的是空字符串。这时候给空字符串拼个],就变成只有]的文本,JSON解析器肯定认不出来,直接报错。

怎么解决?

换个思路,先把文件内容完整读到内存里,再处理格式问题,步骤如下:

  1. 先把整个文件内容读成字符串,避开流位置的坑
  2. 清理并修复JSON文本:
    • 先把末尾的换行、空格这类空白字符去掉,避免干扰判断
    • 如果最后一个字符是逗号,直接删掉
    • 如果最后不是],就补上这个闭合方括号
  3. 用修复后的文本重新解析

修正后的完整代码

// 先把文件内容完整读成字符串,避免流位置问题
string jsonText;
using (var reader = new StreamReader(_loadedFile.OpenReadStream(maxAllowedSize: 1024 * 1024 * 10)))
{
    jsonText = await reader.ReadToEndAsync();
}

JsonDocument json = null;
try
{
    // 先尝试正常解析
    using var doc = JsonDocument.Parse(jsonText);
    json = doc.Clone(); // 按需处理文档内容,这里用Clone保留实例
}
catch (JsonException ex)
{
    Console.WriteLine(ex.Message);

    // 开始修复JSON格式
    jsonText = jsonText.TrimEnd(); // 先清掉末尾的空白字符
    if (!string.IsNullOrEmpty(jsonText))
    {
        // 处理末尾是逗号的情况
        if (jsonText[^1] == ',')
        {
            jsonText = jsonText.Substring(0, jsonText.Length - 1);
        }
        // 检查是否缺闭合方括号
        if (jsonText[^1] != ']')
        {
            jsonText += ']';
        }
    }

    // 重新解析修复后的JSON,再加一层try-catch防还有错
    try
    {
        using var fixedDoc = JsonDocument.Parse(jsonText);
        json = fixedDoc.Clone();
    }
    catch (JsonException fixEx)
    {
        Console.WriteLine($"修复后还是解析失败:{fixEx.Message}");
        // 这里可以加自己的错误处理逻辑,比如记录日志啥的
    }
}

关键点说明

  • 先读完整文本到内存,彻底避开流多次读取的位置问题
  • 修复前先清末尾空白,不然换行、空格会影响你判断最后一个字符
  • 代码里用的jsonText[^1]是C# 8.0+的语法,直接取最后一个字符,旧版本可以换成jsonText[jsonText.Length - 1]
  • 二次解析也要套try-catch,万一JSON还有其他格式问题,比如中间缺引号之类的,不至于直接崩

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:11:11