使用Java存储JSONArray时如何避免转义字符存入数据库?
解决org.json.JSONArray存入数据库出现转义字符的问题
你当前的问题核心是将已序列化的JSON字符串直接放入JSONArray,导致JSONArray把该字符串当作普通字符串处理,自动转义了其中的引号。要解决这个问题,需要将modelObject转换为org.json.JSONObject而非JSON字符串,再放入JSONArray中。
修改后的代码示例:
String configuration = dtoObject.getConfig(); JSONArray configJsonArray = new JSONArray(configuration); // 从configJsonArray中获取modelObject // 对modelObject执行一些操作 // 替换:将modelObject转为JSONObject而非字符串 JSONObject modelJson = new JSONObject(modelObject); configJsonArray.put(0, modelJson); // 插入JSONObject到数组 dtoObject.setConfig(configJsonArray.toString()); myRepository.save(dtoObject);
原理说明:
- 原代码中
JsonUtils.toJson(modelObject)生成的是JSON格式的字符串,当你把这个字符串放入JSONArray时,JSONArray会将其视为普通字符串元素,在调用toString()时会对字符串内的引号进行转义,最终得到带\"的结果。 - 改为将modelObject直接转为
JSONObject后,JSONArray会识别这是一个JSON对象,序列化时会直接解析对象结构,生成无转义的正确JSON数组字符串,最终存入数据库的结果会是[{"foo":"bar"}]。
如果你的JsonUtils工具类支持直接转成JSONObject,也可以用工具类的方法代替new JSONObject(modelObject),比如:
JSONObject modelJson = JsonUtils.toJsonObject(modelObject);
内容的提问来源于stack exchange,提问作者konda surekha
相关产品推荐
相关产品推荐

