Java中JSON解析如何转义双引号 适配Couchbase SDK使用场景
JSON运行时解析双引号转义处理方案
问题核心原因
JSON标准语法要求:字符串值内部出现的双引号必须前置1个反斜杠\转义,不符合该规则的JSON会被所有合规解析器判定为格式异常。你遇到的报错是因为JSON内嵌双引号的转义层级和当前解析场景不匹配导致的。
分场景解决方案
场景1:直接修改JSON源文件
如果是从本地文件读取JSON进行解析,不需要考虑编程语言的字符串转义规则,直接给字符串内部的双引号前加1个\即可,修正后的合法JSON示例:
{ "event": { "signUp": false, "info": { "celebity": "In an attempt to \"test\" purchased a table,enjoy with our who are also new \"empty\" the best use of this space for our \"always\" enjoyment!" } } }
场景2:Java代码中硬编码JSON字符串
Java语法要求字符串中的反斜杠本身需要额外转义,因此JSON需要的转义反斜杠要多写一层,内嵌双引号需写为\\",示例代码:
String json = "{" + "\"event\":{" + "\"signUp\":false," + "\"info\":{" + "\"celebity\":\"In an attempt to \\\"test\\\" purchased a table,enjoy with our who are also new \\\"empty\\\" the best use of this space for our \\\"always\\\" enjoyment!\"" + "}" + "}" + "}"; JsonTranscoder trans = new JsonTranscoder(); com.couchbase.client.java.document.json.JsonObject jsonObj = trans.stringToJsonObject(json);
场景3:批量处理大量不符合规范的JSON文件
如果已有大量转义不合格的JSON文件,可在调用Couchbase解析前增加预处理步骤,通过正则替换补全转义,避免手动修改所有文件:
// 正则仅匹配JSON字符串值内部未转义的双引号,不会误改JSON结构本身的双引号 String processedJson = json.replaceAll("(?<!\\\\)\"(?=.*?\"(?=\\s*[,}]))", "\\\\\""); JsonTranscoder trans = new JsonTranscoder(); com.couchbase.client.java.document.json.JsonObject jsonObj = trans.stringToJsonObject(processedJson);
内容的提问来源于stack exchange,提问作者Vishnu
相关产品推荐
相关产品推荐

