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

解析TSV文件内嵌JSON文档时Gson转义异常如何解决

解决方案

问题根因

你遇到的解析异常核心是TSV读取逻辑导致的JSON转义层级破坏:
TSV格式默认将反斜杠作为转义字符,你读取TSV第四列时,TSV解析器已经对原始JSON的转义字符做了一层转义处理,拿到的字符串已经丢失了JSON原本的转义规则。你后续全局替换反斜杠的操作会进一步破坏残留的合法转义,比如原本合法的\"会被转成\\",导致引号提前闭合,触发JSON格式异常。

最优方案:修正TSV读取逻辑(一劳永逸)

直接从数据源端解决问题,读取TSV时关闭转义规则,拿到原始未被转义的JSON字符串,不需要任何额外处理即可正常解析。
以OpenCSV的TSV解析为例,配置示例:

// 构造TSV解析器时关闭转义字符
CSVParser tsvParser = new CSVParserBuilder()
    .withSeparator('\t')
    .withEscapeChar(CSVWriter.NO_ESCAPE_CHARACTER) // 核心配置:不处理转义
    .build();
CSVReader reader = new CSVReaderBuilder(new FileReader("your-file.tsv"))
    .withCSVParser(tsvParser)
    .build();

备选方案:容错解析(无法修改TSV读取逻辑时使用)

不要自己写全局转义逻辑,极易破坏JSON结构,直接使用容错性更高的JSON解析器先做格式归一,再用Gson解析。推荐用org.json的宽松解析器处理:

  1. 引入org.json依赖
  2. 解析逻辑修改为:
try {
    // 优先直接解析合法JSON
    json.setInputReference(gson.fromJson(rowJsonMappingJson, Structured.class));
} catch (JsonParseException exception) {
    // 用org.json做容错归一化
    org.json.JSONObject rawJson = new org.json.JSONObject(rowJsonMappingJson);
    String normalizedJson = rawJson.toString();
    // 归一化后的JSON可直接用Gson解析
    json.setInputReference(gson.fromJson(normalizedJson, Structured.class));
}

避坑提醒

  • 不要对整个JSON字符串做全局的反斜杠、引号替换,会把JSON结构本身的符号转义破坏。
  • 不要用你自定义的escapeJson方法,该方法会把JSON结构的双引号也转义,直接导致整个JSON结构失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:57:05