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

如何在使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:31:06