【问题标题】:JSON conversion to a specific formatJSON 转换为特定格式
【发布时间】:2020-08-05 01:21:13
【问题描述】:

我有一个 Java 对象并试图将其转换为特定的 JSON 格式

    public class Audit {
       String auditId;
       String auditData;
    }

以上对象需要转换成以下JSON格式

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

我们如何使用 Jackson 解析器转换上述格式

【问题讨论】:

    标签: json spring spring-boot jackson-databind


    【解决方案1】:

    您需要为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();   
        }
    }
    

    然后使用此自定义序列化程序获取 Audit 的 JSON 字符串:

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

    如果你用@JsonSerialize(using=AuditSerializer.class)注释Audit类,那么你不需要显式注册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"}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-29
      • 2021-02-04
      • 2020-11-06
      • 2019-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多