You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何依据Avro Schema将数据对象序列化为JSON字符串?

Avro对象按Schema序列化为JSON字符串的实现方法

当然可以实现,Avro本身提供了原生的JSON序列化工具,以下是具体实现方案:

1. 引入Avro依赖

如果使用Maven,在pom.xml中添加依赖(使用最新稳定版本即可):

<dependency>
    <groupId>org.apache.avro</groupId>
    <artifactId>avro</artifactId>
    <version>1.11.3</version>
</dependency>

2. 序列化GenericRecord为JSON

若数据对象是手动构造的GenericRecord,可通过GenericDatumWriter和JsonEncoder完成序列化:

import org.apache.avro.Schema;
import org.apache.avro.generic.GenericRecord;
import org.apache.avro.io.DatumWriter;
import org.apache.avro.io.JsonEncoder;
import org.apache.avro.specific.SpecificDatumWriter;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class AvroJsonSerializer {
    public static String serializeGenericToJson(GenericRecord record, Schema schema) throws IOException {
        DatumWriter<GenericRecord> datumWriter = new SpecificDatumWriter<>(schema);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        JsonEncoder encoder = new JsonEncoder(schema, outputStream);
        
        datumWriter.write(record, encoder);
        encoder.flush();
        
        return outputStream.toString("UTF-8");
    }
}

3. 序列化SpecificRecord为JSON

若数据对象是Avro工具生成的SpecificRecord子类(从Schema编译出的Java类),代码逻辑如下:

import org.apache.avro.specific.SpecificRecord;
import org.apache.avro.io.DatumWriter;
import org.apache.avro.io.JsonEncoder;
import org.apache.avro.specific.SpecificDatumWriter;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class AvroJsonSerializer {
    public static <T extends SpecificRecord> String serializeSpecificToJson(T record) throws IOException {
        DatumWriter<T> datumWriter = new SpecificDatumWriter<>(record.getSchema());
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        JsonEncoder encoder = new JsonEncoder(record.getSchema(), outputStream);
        
        datumWriter.write(record, encoder);
        encoder.flush();
        
        return outputStream.toString("UTF-8");
    }
}

关键注意事项

  • JsonEncoder会严格遵循Schema定义生成JSON,保证输出格式合规
  • 若数据与Schema不匹配(如字段缺失、类型不兼容),会抛出IOException,需自行处理异常
  • 输出的JSON会包含Schema定义的所有字段,即使字段值为null也会保留(符合Avro JSON序列化规范)

内容的提问来源于stack exchange,提问作者Arman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 03:01:13