1

假设我在 avro 中有这样的模式

{ "type" : "string" }

我应该如何在 java 中从这个模式创建对象?

4

1 回答 1

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);

如何将我的 json 字符串二进制编码为字节数组?

于 2019-08-04T17:32:40.050 回答