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

如何处理含合法转义序列的JSON中的非法转义序列

用Json.NET处理含非法转义序列的JSON解析

默认情况下,Json.NET会严格遵循JSON语法规范,遇到非法转义序列(比如示例中的\"、\L)会直接抛出异常。要实现仅处理非法转义、保留合法转义的需求,可以通过以下两种方式实现:

方案1:自定义JsonTextReader处理转义逻辑

继承JsonTextReader并重写转义字符的处理逻辑,对合法转义正常解析,对非法转义直接忽略反斜杠、保留后续字符:

public class LenientJsonTextReader : JsonTextReader
{
    public LenientJsonTextReader(TextReader reader) : base(reader) { }

    protected override char ReadEscapedCharacter()
    {
        char nextChar = base.ReadNextChar();
        
        // 合法转义字符列表,遵循JSON规范定义
        var validEscapes = new HashSet<char> { '"', '\\', '/', 'b', 'f', 'n', 'r', 't', 'u' };
        if (validEscapes.Contains(nextChar))
        {
            // 合法转义,调用基类方法正常处理
            return base.ReadEscapedCharacter();
        }
        
        // 非法转义,直接返回后续字符,忽略前置反斜杠
        return nextChar;
    }
}

使用示例:

string invalidJson = @"{ 
  ""aField1"": ""this is an \n example of a value\"", 
  ""aField2"": ""this is another \t example of a \L value"" 
}";

using (var stringReader = new StringReader(invalidJson))
using (var lenientReader = new LenientJsonTextReader(stringReader))
{
    JToken parsedToken = JToken.Load(lenientReader);
    // 输出处理后的JSON,合法转义保留,非法转义被修正
    Console.WriteLine(parsedToken.ToString());
}

方案2:预处理JSON字符串,精准替换非法转义

使用正则表达式匹配并移除非法的反斜杠(即反斜杠后不是合法转义字符的情况),再用Json.NET正常解析:

using System.Text.RegularExpressions;

string invalidJson = @"{ 
  ""aField1"": ""this is an \n example of a value\"", 
  ""aField2"": ""this is another \t example of a \L value"" 
}";

// 正则匹配:反斜杠后面不是合法转义字符的情况
string cleanedJson = Regex.Replace(invalidJson, @"\\(?![""\\/bfnrtu])", "");

// 此时JSON已修正,可正常解析
JToken parsedToken = JToken.Parse(cleanedJson);
Console.WriteLine(parsedToken.ToString());

注意事项

  • 自定义阅读器方案更灵活,能处理复杂嵌套场景,避免正则可能出现的误匹配;
  • 正则预处理方案实现简单,但需注意边界情况(比如确保不会误处理合法的Unicode转义\uXXXX)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 21:57:57