Json字符串到Java对象Avro

王子詹姆斯:

我正在尝试使用Avro模式将Json字符串转换为通用Java对象。

下面是我的代码。

String json = "{\"foo\": 30.1, \"bar\": 60.2}";
String schemaLines = "{\"type\":\"record\",\"name\":\"FooBar\",\"namespace\":\"com.foo.bar\",\"fields\":[{\"name\":\"foo\",\"type\":[\"null\",\"double\"],\"default\":null},{\"name\":\"bar\",\"type\":[\"null\",\"double\"],\"default\":null}]}";

InputStream input = new ByteArrayInputStream(json.getBytes());
DataInputStream din = new DataInputStream(input);

Schema schema = Schema.parse(schemaLines);

Decoder decoder = DecoderFactory.get().jsonDecoder(schema, din);

DatumReader<Object> reader = new GenericDatumReader<Object>(schema);
Object datum = reader.read(null, decoder);

我收到“ org.apache.avro.AvroTypeException:预期的开始联盟。得到VALUE_NUMBER_FLOAT”异常。

如果我在架构中没有联合,则相同的代码有效。有人可以解释一下并给我一个解决方案吗?

miljanm:

您的架构与json字符串的架构不匹配。您需要具有不同的架构,该架构在错误处没有并集,但有一个十进制数。然后,可以将这样的架构用作编写者架构,而您可以自由地将另一个用作编写者架构。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章