Java中输出JSONObject日志时如何去除多余反斜杠?
解决日志输出JSON带多余反斜杠的问题
先明确你的问题场景:
你的代码:
@Slf4j public class MyMessage { public void initMy(JSONObject json) { log.info("Object: "+ json.toString()); } }
传入的原始JSON是 {"request":"hello"},但日志最终输出成 Object: {\"request\":\"hello\"},需要去掉这些多余的反斜杠。
常见解决办法:
1. 改用日志框架的参数化输出(最推荐)
直接拼接字符串是核心问题——如果你的日志框架(比如Logback/Log4j)配置了JSON格式输出,框架会自动转义字符串里的引号,防止破坏日志本身的JSON结构。
改成占位符写法即可:
log.info("Object: {}", json.toString());
通过{}作为参数占位符,日志框架会正确识别参数内容,不会额外添加转义符。
2. 切换JSONObject的序列化方法
如果使用的是阿里FastJSON的JSONObject,建议用toJSONString()替代toString(),前者会输出标准无转义的JSON字符串:
log.info("Object: {}", json.toJSONString());
要是用的是org.json的JSONObject,它的toString()本身就应该输出正确的JSON,那问题基本就出在日志字符串拼接上,用第一种方法就能解决。
3. 为什么你之前的replace方法没用?
你写的json.toString().replace("\\\"", "\"")是试图把字符串里的\"替换成",但如果是日志框架在输出阶段才做的转义,你在代码里替换完后,框架还是会再次转义,等于无效操作。所以优先用前面两种方案。
内容的提问来源于stack exchange,提问作者fanastasiiaf
相关产品推荐
相关产品推荐

