Próbuję przekonwertować ciąg Json na ogólny obiekt Java, ze schematem Avro.Json String to Java Object Avro
Poniżej znajduje się mój kod.
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);
otrzymuję "org.apache.avro.AvroTypeException: Spodziewane rozpoczęcie unii Got VALUE_NUMBER_FLOAT." Wyjątek.
Ten sam kod działa, jeśli nie mam związków w schemacie. Czy ktoś może wyjaśnić i dać mi rozwiązanie.
Z http://avro.apache.org/docs/1.7.6/spec.html#json_encoding, rozumiem, że kodowanie Jsona dla związków jest inne, ale próbuję dowiedzieć się, czy istnieje jakakolwiek metoda, dzięki której Mogę konwertować ciąg json do obiektu. –
FYI, przeciążenie 'jsonDecoder()' akceptuje ciąg json; nie ma potrzeby przekształcania go w strumień. – jaco0646