json - ObjectMapper 在我的 JSON 中显式打印回车符和转义引号

标签 json regex spring groovy jackson

被要求修改一个项目以节省控制台和日志文件中的空间,该项目具有以下 Spring 应用程序属性我被要求保留原位:

spring.jackson.serialization.indent_output=true

显然,这会很好地打印我们所有的 JSON 并在控制台和日志文件中占用大量空间。

该应用程序有一个扩展 Spring 的 OncePerRequestFilter 类的 groovy 类,该类获取 HTTP 请求和响应并通过屏蔽敏感数据的 groovy 类发送它们。此类有一个接收字符串的方法,该字符串本质上是请求或响应正文的字符串化版本。

一旦字符串被屏蔽,它就会通过 Jackson 的 ObjectMapper 运行,基本上撤消 spring 应用程序属性,使每个打印都漂亮:

代码#1:

return objectMapper.writer().without(SerializationFeature.INDENT_OUTPUT).writeValueAsString(stringToWrite);

下面是将通过代码的一些示例输入:

{
  "person" : {
    "personName" : "BAR,      FOO",
  }
}

...结果是...

结果 #1:

"{\r\n  \"person\" : {\r\n    \"personName\" : \"BAR,      FOO\",\r\n    }\r\n    }"

...试图采取简单的方法,我认为在字符串上应用一个简单的 .replaceAll() 会消除显式引号转义和回车,但我发现回车消失了,引号只是转义马上回来...

代码#2:

return objectMapper.writer().without(SerializationFeature.INDENT_OUTPUT).writeValueAsString(stringToWrite.replaceAll("\\\"", '"').replaceAll("\\r", "").replaceAll("\\n", ""));

结果 #2:

"{  \"person\" : {    \"personName\" : \"BAR,      FOO\"  }  }"

... 最后,如果我只使用

代码#3

.replaceAll("\\\"", "")

... 而不是我在代码 #2 中使用的是 ...

.replaceAll("\\\"", '"')

...然后我得到...

结果 #3

"{  person : {    personName : BAR,      FOO  }  }"

...但是问我的是...

期望的结果:

"{  "person" : {    "personName" : "BAR,      FOO"  }  }"

这似乎是 objectMapper 使用的结果,但此时我有点不知所措。

最佳答案

原来你可以设置它,但这并不明显。 可能有更好的方法,但我发现这个可行:

    DefaultPrettyPrinter p = new DefaultPrettyPrinter();
    DefaultPrettyPrinter.Indenter i = new DefaultIndenter("  ", "\n");
    p.indentArraysWith(i);
    p.indentObjectsWith(i);

    mapper.setDefaultPrettyPrinter(p);
    String jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(myObject);

关于json - ObjectMapper 在我的 JSON 中显式打印回车符和转义引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42146372/

相关文章:

java - 用于验证单词不包含数字或特殊字符的正则表达式

java - Spring MVC Rest App - 加载属性的最佳实践

java - @ComponentScan 和 @Bean 在上下文配置中有什么区别?

java - 添加 wlfullclient-12.1.1 外部 jar 时,Spring Boot 应用程序为何会中断?

javascript - vue中如何比较两个json的数据并根据结果显示图标?

php - 按 JSON 数组对 SQL 数据进行分组

python - 使用正则表达式在 Pandas Dataframe 中创建新列

python - 识别文本中的句子

ios - 国家城市州列表

ios - Json 数据和我所做的类不匹配