从原始Avro模式创建对象

时间:2018-08-22 12:47:55

标签: java avro spark-avro jackson-dataformat-avro

假设我在这样的avro中有一个架构

{ "type" : "string" }

我应该如何在Java中从该架构创建对象?

1 个答案:

答案 0 :(得分:1)

我没有找到直接用java avro lib做到这一点的方法

但是您仍然可以这样做

  public static byte[] jsonToAvro(String json, Schema schema) throws IOException {
    DatumReader<Object> reader = new GenericDatumReader<>(schema);
    GenericDatumWriter<Object> writer = new GenericDatumWriter<>(schema);
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    Decoder decoder = DecoderFactory.get().jsonDecoder(schema, json);
    Encoder encoder = EncoderFactory.get().binaryEncoder(output, null);
    Object datum = reader.read(null, decoder);
    writer.write(datum, encoder);
    encoder.flush();
    return output.toByteArray();
  }
Schema PRIMITIVE = new Schema.Parser().parse("{ \"type\" : \"string\" }");
byte[] b = jsonToAvro("\"" + mystring + "\"", PRIMITIVE);

来自How to avro binary encode my json string to a byte array?