Thank you very much for the solution and its explanation. -- Emre Sevinç
On Mon, Dec 15, 2014 at 8:12 PM, Doug Cutting <[email protected]> wrote: > > Avro's JSON encoding requires that non-null union values be tagged > with their intended type. This is because unions like > ["bytes","string"] and ["int","long"] are ambiguous in JSON, the first > are both encoded as JSON strings, while the second are both encoded as > JSON numbers. > > http://avro.apache.org/docs/current/spec.html#json_encoding > > Thus your record must be encoded as: > > {"name": "Alyssa", "favorite_number": {"int": 7}, "favorite_color": null} > > Doug > > On Mon, Dec 15, 2014 at 7:27 AM, Emre Sevinc <[email protected]> > wrote: > > Hello, > > > > I'm trying to validate a JSON file using an Avro schema and write the > > corresponding Avro file. First, I've defined the following Avro schema > named > > user.avsc: > > > > {"namespace": "example.avro", > > "type": "record", > > "name": "user", > > "fields": [ > > {"name": "name", "type": "string"}, > > {"name": "favorite_number", "type": ["int", "null"]}, > > {"name": "favorite_color", "type": ["string", "null"]} > > ] > > } > > > > Then created a user.json file: > > > > {"name": "Alyssa", "favorite_number": 7, "favorite_color": null} > > > > And then tried to run: > > > > java -jar ~/bin/avro-tools-1.7.7.jar fromjson --schema-file user.avsc > > user.json > user.avro > > > > But I get the following exception: > > > > Exception in thread "main" org.apache.avro.AvroTypeException: Expected > > start-union. Got VALUE_NUMBER_INT > > at org.apache.avro.io.JsonDecoder.error(JsonDecoder.java:697) > > at org.apache.avro.io.JsonDecoder.readIndex(JsonDecoder.java:441) > > at > > org.apache.avro.io.ResolvingDecoder.doAction(ResolvingDecoder.java:290) > > at org.apache.avro.io.parsing.Parser.advance(Parser.java:88) > > at > > org.apache.avro.io.ResolvingDecoder.readIndex(ResolvingDecoder.java:267) > > at > > > org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:155) > > at > > > org.apache.avro.generic.GenericDatumReader.readField(GenericDatumReader.java:193) > > at > > > org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:183) > > at > > > org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:151) > > at > > > org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:142) > > at > org.apache.avro.tool.DataFileWriteTool.run(DataFileWriteTool.java:99) > > at org.apache.avro.tool.Main.run(Main.java:84) > > at org.apache.avro.tool.Main.main(Main.java:73) > > > > > > Am I missing something? Why do I get "Expected start-union. Got > > VALUE_NUMBER_INT". > > > > > > -- > > Emre Sevinç > -- Emre Sevinc
