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

Gson语法异常求助:note_title/note_desc含特殊字符致JSON解析失败

解决Gson解析时因特殊字符导致的MalformedJsonException异常

问题背景

应用抛出com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException异常,推测由note_title和note_desc字段包含特殊字符引发,修改字段类型后问题未解决。

核心原因

Gson解析JSON时,未转义的特殊字符(如双引号"、反斜杠\、换行符\n、制表符\t等)会破坏JSON的语法结构,直接导致解析失败。

可行解决方法

1. 确保Gson实例使用默认转义策略

手动初始化Gson时,避免自定义序列化逻辑时跳过转义;若通过框架集成(如Retrofit),确认ConverterFactory使用默认配置的Gson实例:

// 标准Gson初始化,自动处理特殊字符转义
Gson gson = new GsonBuilder().create();

// 序列化对象
String json = gson.toJson(noteEntity);
// 反序列化操作
NoteEntity note = gson.fromJson(json, NoteEntity.class);

2. 预处理用户输入的特殊字符

在存储或发送note_title、note_desc前,手动转义或替换可能破坏JSON的字符:

public String escapeSpecialChars(String input) {
    if (input == null) return null;
    return input.replace("\\", "\\\\")
                .replace("\"", "\\\"")
                .replace("\n", "\\n")
                .replace("\r", "\\r")
                .replace("\t", "\\t");
}

// 使用示例
note.setNoteTitle(escapeSpecialChars(userInputTitle));
note.setNoteDesc(escapeSpecialChars(userInputDesc));

注:若后续需要展示原始内容,需编写对应反转义方法。

3. 检查实体类与自定义TypeAdapter

  • 确认NoteEntity的@SerializedName注解字段名与JSON结构完全匹配,避免字段映射错误:
public class NoteEntity {
    @SerializedName("note_title")
    private String noteTitle;

    @SerializedName("note_desc")
    private String noteDesc;

    // getter/setter 方法
}
  • 若使用自定义TypeAdapter,检查读写逻辑是否正确处理字符串,避免字段赋值错误或跳过转义步骤。

4. 定位具体异常字符

捕获解析异常并打印待解析的JSON字符串,精准定位问题字符:

try {
    NoteEntity note = gson.fromJson(jsonString, NoteEntity.class);
} catch (JsonSyntaxException e) {
    Log.e("GsonParseError", "待解析JSON: " + jsonString, e);
}

通过日志中的JSON内容,针对性处理特殊字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:10:29