JSON 转换为特定格式

Posted

技术标签:

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

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

    public class Audit 
       String auditId;
       String auditData;
    

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


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

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

【问题讨论】:

【参考方案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"

【讨论】:

以上是关于JSON 转换为特定格式的主要内容,如果未能解决你的问题,请参考以下文章

使用 Pig 将 Json 数据转换为特定的表格格式

如何在PHP中将对象转换为特定格式的数组

python KDE将轮廓和路径转换为特定的json格式传单友好

如何将 csv 转换为 json 并编写特定函数以使用 javascript 生成图形?

如何将数组json数据转换为jquery中的特定json?

无法将 JSON 转换为正确的格式