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

从SQLite获取JSON数据时数组出现转义字符\的解决咨询

解决SQLite取出JSON数组时的转义字符问题

这种转义字符\"出现的情况,我之前在处理JS-Java-SQLite的数据流转时也碰到过,大概率是JSON字符串被重复序列化导致的,下面给你拆解原因和解决办法:

为什么会出现转义字符?

最常见的场景是:

  • JavaScript里已经用JSON.stringify(yourArray)把数组转成了合法的JSON字符串(比如"[1,2,3]"),传到Java层后,又多做了一次序列化操作——比如调用new JSONObject(jsonStr).toString(),这时候原本的双引号会被再次转义,变成"[\"1\",\"2\",\"3\"]",存到数据库里就会保留这些多余的转义符。
  • 少数情况是存数据库时用了字符串拼接SQL(而非参数化查询),手动加了转义,但这种现在已经很少见了。

解决办法

1. 从根源修复(最优解):修正存入逻辑

这能彻底避免后续问题,步骤如下:

  • 确认JS传递给Java的是已经正确序列化的JSON字符串:比如在JS里执行JSON.stringify(yourArray),直接把结果传给Java。
  • Java层不要对这个字符串再做序列化,直接存入数据库:
    // 假设从JS拿到的正确JSON字符串是jsonArrayStr
    ContentValues values = new ContentValues();
    values.put("json_column", jsonArrayStr);
    // 用参数化方式插入,避免手动转义
    db.insert("your_table", null, values);
    
    这样存进去的就是原始JSON,取出时不会有多余转义。

2. 取出时临时补救(适合没法改存入代码的场景)

如果暂时没法调整存入逻辑,可以在取出后处理转义:

  • 稳妥的方式是用JSON库解析,避免手动替换误改合法转义:
    // 从数据库取出带转义的字符串
    String escapedJson = cursor.getString(cursor.getColumnIndex("json_column"));
    // 先解析成原始JSON字符串(此时escapedJson是被转义的字符串,比如 "\"[1,2,3]\"")
    String rawJson = new JSONObject(escapedJson).getString("");
    // 再转成JSON数组
    JSONArray jsonArray = new JSONArray(rawJson);
    
    用Gson的话会更简洁:
    Gson gson = new Gson();
    String escapedJson = cursor.getString(...);
    // 还原出原始JSON字符串
    String rawJson = gson.fromJson(escapedJson, String.class);
    // 转成目标数组(YourModel是你的数据模型类)
    YourModel[] array = gson.fromJson(rawJson, YourModel[].class);
    

排查是否是存入代码导致的?

  • 在存入数据库前,先打印要存入的JSON字符串,如果此时已经有\",那就是JS到Java的传递或Java层处理出了问题;
  • 直接查看数据库内容(比如用SQLiteStudio打开.db文件),如果字段值本身带转义,那肯定是存入时就已经生成了转义字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:56:48