如何在将时间戳字段从毫秒转换为日期时间的同时将Avro GenericRecord转换为Json?
当前使用Avro 1.8.2
Timestamp tsp = new Timestamp(1530228588182l);
Schema schema = SchemaBuilder.builder()
.record("hello")
.fields()
.name("tsp").type(LogicalTypes.timestampMillis().addToSchema(Schema.create(Schema.Type.LONG))).noDefault()
.endRecord();
System.out.println(schema.toString());
GenericRecord genericRecord = new GenericData.Record(schema);
genericRecord.put("tsp",tsp.getTime()); //Assume I cannot change this
System.out.println(genericRecord.toString());
Run Code Online (Sandbox Code Playgroud)
我尝试使用下面的函数,但结果与 genericrecord.toString()
public static String toJsonString(Schema schema, GenericRecord genericRecord) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
GenericDatumWriter<GenericRecord> writer = new GenericDatumWriter<>(schema);
writer.getData().addLogicalTypeConversion(new TimeConversions.TimestampConversion());
JsonEncoder encoder = EncoderFactory.get().jsonEncoder(schema, baos, false);
writer.write(genericRecord, encoder);
encoder.flush();
return baos.toString();
}
Run Code Online (Sandbox Code Playgroud)
第三次尝试
public static GenericRecord deserialize(final Schema schema, byte[] data) throws IOException {
final GenericData …Run Code Online (Sandbox Code Playgroud) avro ×1