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

含反斜杠的JSON字符串解析失败,寻求有效解决方案

解决方法

1. 修复数据库原始数据

你存储的字符串本身不是合法JSON:"C:\"里的反斜杠未转义,会破坏JSON结构。需将数据库中所有路径里的单个反斜杠\替换为双反斜杠\\,确保存储的是标准JSON:

[{"MountPoint":"C:\\","FreeSpace":"18 GB","TotalCapacity":"39 GB","TotalBytes":42580570112,"FreeBytes":19708321792}]

2. 无法修改数据库时,Java层修复

从数据库读取字符串后,先修复转义问题再序列化:

// 读取数据库原始字符串
String dbRawStr = "[{\"MountPoint\":\"C:\\\",\"FreeSpace\":\"18 GB\",\"TotalCapacity\":\"39 GB\",\"TotalBytes\":42580570112,\"FreeBytes\":19708321792}]";
// 替换未转义的单个反斜杠为双反斜杠,避免重复转义
String fixedJson = dbRawStr.replaceAll("(?<!\\\\)\\\\(?!\\\\)", "\\\\\\\\");
// 解析为JSONArray(原始数据是数组,不能用JSONObject)
JSONArray jsonArray = new JSONArray(fixedJson);
// 序列化后发送给客户端
String responseJson = jsonArray.toString();

3. 规避重复序列化错误

不要直接把数据库读取的字符串存入JSONObject——原始数据是数组结构,应该用JSONArray解析,否则会把整个数组当成单个字符串值传输,导致前端解析时出现多余引号和转义。

错误根源

数据库里的字符串不符合JSON规范:"C:\"中的反斜杠会转义后续的双引号,导致JSON结构断裂。Java序列化时又对反斜杠做了一次转义,最终前端拿到的MountPoint值是"C:\\"(对应实际字符C:\),这个反斜杠再次转义了属性值末尾的双引号,让JSON解析器误以为属性值未结束,从而抛出语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:35:24