Tôi đang cố gắng chuyển đổi một chuỗi Json thành một đối tượng Java chung, với một lược đồ Avro.Chuỗi Json đến đối tượng Java Avro
Dưới đây là mã của tôi.
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);
Tôi nhận được "org.apache.avro.AvroTypeException: Công đoàn bắt đầu dự kiến. Got VALUE_NUMBER_FLOAT" Ngoại lệ.
Cùng một mã hoạt động, nếu tôi không có công đoàn trong lược đồ. Ai đó có thể giải thích và đưa cho tôi một giải pháp.
Từ http://avro.apache.org/docs/1.7.6/spec.html#json_encoding, tôi hiểu rằng mã hóa Json cho các công đoàn là khác nhau, nhưng tôi đang cố gắng tìm ra nếu có bất kỳ cách nào, theo đó Tôi có thể chuyển đổi chuỗi json thành đối tượng. –
FYI, quá tải của 'jsonDecoder()' chấp nhận một chuỗi json; không cần phải chuyển đổi nó thành luồng. – jaco0646