如何在使用ObjectMapper时保持JsonObject/JsonNode字符串原样?
解决ObjectMapper序列化时保持原始字符串完整性的问题
默认情况下,ObjectMapper序列化JSON时会自动处理换行符等特殊字符,甚至添加缩进格式化,导致原始字符串的格式被篡改。要保持JsonNode/JsonObject的原始字符串格式,可以按以下方法处理:
1. 配置ObjectMapper保留原始格式
修改ObjectMapper的序列化和解析配置,禁用特殊字符转义,同时控制输出格式:
ObjectMapper mapper = new ObjectMapper(); // 关闭非ASCII字符转义,保留原始换行、空格等格式 mapper.configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, false); // 允许解析包含未转义控制字符的JSON,确保原始字符串能被正确读取 mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true); // 若不需要自动缩进换行,禁用格式化输出(需要缩进的话可保留此特性) mapper.disable(SerializationFeature.INDENT_OUTPUT); // 示例:解析原始JSON字符串再序列化回字符串 String originalJson = "{\"provision\": \" purpose of usefuleness.\\n\\n shall not use personal-provided facilities.\\n\\nWe shall not be required to pay you. \"}"; JsonNode jsonNode = mapper.readTree(originalJson); String result = mapper.writeValueAsString(jsonNode); System.out.println(result);
2. 跳过解析直接使用原始字符串
如果不需要对JSON内容做修改,只是原样输出,完全可以跳过ObjectMapper的序列化/反序列化流程,直接使用原始字符串即可,避免不必要的格式转换。
3. 处理org.json.JSONObject的情况
如果你用的是org.json.JSONObject,它默认会保留原始字符串的格式,直接调用toString()就能得到原始格式的结果:
String originalJsonStr = "{\"provision\": \" purpose of usefuleness.\\n\\n shall not use personal-provided facilities.\\n\\nWe shall not be required to pay you. \"}"; JSONObject jsonObject = new JSONObject(originalJsonStr); // 直接获取原始格式字符串,如需缩进可传入参数toString(4) String result = jsonObject.toString(); System.out.println(result);
内容的提问来源于stack exchange,提问作者Rocky4Ever
相关产品推荐
相关产品推荐

