【问题标题】:Jackson serialize POJO to JS ObjectJackson 将 POJO 序列化为 JS 对象
【发布时间】:2019-03-28 19:52:59
【问题描述】:
class Foo {
  String name = "Bar";
}

使用ObjectMapper().convertValue(foo, JsonNode::class)序列化上述对象将返回JSON对象:

{
  "name": "Bar"
}

我想要的结果是:

{
  name: "Bar"
}  

我尝试过自定义序列化程序,但它总是将键写为字符串。有没有办法使用 Jackson 或它的任何注释以这种格式序列化我的 POJO,以避免替换字符或构建我自己的字符串。

【问题讨论】:

  • 您想要的结果不是有效的 JSON。您是在尝试生成 JSON 还是类似 JSON 的东西?
  • @Makoto JSON-like 作为 JavaScript 对象。
  • 记住——你不能有一个带有无效 JSON 的 JavaScript 对象,所以我再声明一次——这会是类似于 JSON 的东西吗(你要处理这样一个事实它在您这边无效),或者您是否将其提供给其他可以合理期望有效 JSON 的东西(例如 JavaScript 应用程序)?
  • 我将其生成为 javascript 对象并使用 application/javascript 内容类型传递它。这是在 JS 前端应用程序中注入的。

标签: java jackson objectmapper


【解决方案1】:

除了您的“JSON”将不再有效之外,您还可以在您的 ObjectMapper 中禁用 JsonGenerator.Feature.QUOTE_FIELD_NAMES

ObjectMapper mapper = new ObjectMapper()
        .disable(JsonGenerator.Feature.QUOTE_FIELD_NAMES);

mapper.writeValueAsString(new Foo()) 的结果将是:

{name:"Bar"}

要启用漂亮的打印,您可以使用:

ObjectMapper mapper = new ObjectMapper()
        .disable(JsonGenerator.Feature.QUOTE_FIELD_NAMES)
        .enable(SerializationFeature.INDENT_OUTPUT);

或者在输出步骤中使用这个:

String result = mapper
        .writerWithDefaultPrettyPrinter()
        .writeValueAsString(new Foo());

两种情况的结果都是:

{
  name : "Bar"
}

【讨论】:

  • 这正是我一直在寻找的我知道它破坏了 JSON 的有效性,但它并不完全是 JSON,它作为 JS 对象注入到前端,它可以具有未引用的字段名称。非常感谢。
  • 抱歉,它正在从缓存加载响应。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
  • 2014-10-22
  • 2012-04-07
  • 2020-12-10
  • 1970-01-01
相关资源
最近更新 更多