我有一个JSON格式的对象,如下所示。
[
{
"id":1,
"name":"name1",
"address":"address1"
}
]
我需要使用avro对其进行序列化。
我的第一个想法是像下面这样定义我的avro模式
{
"type" : "array",
"items" : {
"type" : "record",
"name" : "MyClass",
"namespace" : "com.test.avro",
"fields" : [ {
"name" : "id",
"type" : "long"
}, {
"name" : "name",
"type" : "string"
}, {
"name" : "address",
"type" : "string"
} ]
}
}
但是我不知道如何使用GenericRecord
对其进行序列化,因为我没有根字段密钥。
GenericRecord record = new GenericData.Record(schema);
record.put(key, value); // I don't have this key
我的第二个想法是只为内部类定义avro模式。
{
"type" : "record",
"name" : "MyClass",
"namespace" : "com.test.avro",
"fields" : [ {
"name" : "id",
"type" : "long"
}, {
"name" : "name",
"type" : "string"
}, {
"name" : "address",
"type" : "string"
} ]
}
然后当我进行序列化时,我会看到类似下面的内容。
List<GenericRecord> response = new ArrayList<>();
for (MyClass entry : list) {
GenericRecord record = new GenericData.Record(schema);
record.put("id", entry.getId());
record.put("name", entry.getName());
record.put("address", entry.getAddress());
response.add(record);
}
但是我坚持初始化DatumWriter
,因为它将变成List<GenericRecord>
,并且我没有初始化的模式。
有人可以帮忙吗?