JSON преобразование в указанный формат c - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть объект Java, и я пытаюсь преобразовать его в конкретный c JSON формат

    public class Audit {
       String auditId;
       String auditData;
    }

, а объект выше и выше необходимо преобразовать в формат JSON

{
    "event":"auditId=100,auditData=purchase order"
}

как конвертировать вышеуказанный формат с помощью парсера Джексона

1 Ответ

2 голосов
/ 22 апреля 2020

Вам нужно написать собственный сериализатор для Audit класса.

public class AuditSerializer extends StdSerializer<Audit> {

    public AuditSerializer() {
        super(Audit.class);
    }

    protected AuditSerializer(Class<Audit> auditClass) {
        super(auditClass);
    }

    @Override
    public void serialize(Audit audit, JsonGenerator gen, SerializerProvider provider) throws IOException {
        gen.writeStartObject();
        String key = "event";
        String value = String.format("auditId=%s,auditData=%s", audit.auditId, audit.auditData);
        gen.writeStringField(key, value);
        gen.writeEndObject();   
    }
}

И затем использовать этот пользовательский сериализатор, чтобы получить JSON строку для Audit:

SimpleModule module = new SimpleModule();
module.addSerializer(new AuditSerializer(Audit.class));

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(module);

Audit audit = new Audit();
audit.auditId = "100";
audit.auditData = "purchase Order";
System.out.println(mapper.writeValueAsString(audit));
// {"event":"auditId=100,auditData=purchase Order"}

Если вы аннотируете класс Audit с помощью @JsonSerialize(using=AuditSerializer.class), вам не нужно явно регистрировать AuditSerializer.

@JsonSerialize(using=AuditSerializer.class)
public class Audit {
    ...

И вы используете ObjectMapper напрямую.

Audit audit = new Audit();
audit.auditId = "100";
audit.auditData = "purchase Order";

ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(audit));
// {"event":"auditId=100,auditData=purchase Order"}
...