Jackson - 使用自定义 PrettyPrinter 和自定义 JsonSerializer

ksl*_*ksl 3 java json jackson jackson2

我正在使用 Jackson v2.8.2 将 JSON 序列化到文件中。

我创建了一个自定义序列化器并实现了serialize根据需要自定义 JSON 输出的方法。

我按如下方式调用序列化器:

// myClass is the object I want to serialize

SimpleModule module = new SimpleModule();
module.addSerializer(MyClass.class, new MySerializer());

ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
mapper.registerModule(module);

try 
{
    mapper.writeValue(new File("json.txt"), myClass);
}

catch (JsonProcessingException e) 
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

JSON 文件已创建,内容看起来不错。

该文件的格式根据DefaultPrettyPrinter但我想使用我自己的自定义PrettyPrinter,我已经实现了。

我怎么做?

我尝试过以下方法:

MyPrettyPrinter myPrettyPrinter = new MyPrettyPrinter();
mapper.writer(myPrettyPrinter);
mapper.writeValue(new File("json.txt"), myClass);
Run Code Online (Sandbox Code Playgroud)

但这并没有调用我的自定义打印机。

cas*_*lin 5

有时,根据您想要实现的目标,您可以使用DefaultPrettyPrinter并自定义Indenter,如下所示:

DefaultPrettyPrinter printer = new DefaultPrettyPrinter();
Indenter indenter = new CustomSpaceIndenter();
printer.indentObjectsWith(indenter); // Indent JSON objects
printer.indentArraysWith(indenter);  // Indent JSON arrays
Run Code Online (Sandbox Code Playgroud)

有一个相关的问题:Serialize JsonNode to a very Specific JSON format in Jackson