首页 > 解决方案 > Jackson 将 POJO 序列化为 JS 对象

问题描述

class Foo {
  String name = "Bar";
}

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

{
  "name": "Bar"
}

然而,我想要的结果是:

{
  name: "Bar"
}  

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

标签: javajacksonobjectmapper

解决方案


除了您的“JSON”不再有效之外,您还可以JsonGenerator.Feature.QUOTE_FIELD_NAMESObjectMapper.

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"
}

推荐阅读