[ 
https://issues.apache.org/jira/browse/AVRO-1099?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13282028#comment-13282028
 ] 

Doug Cutting commented on AVRO-1099:
------------------------------------

In the second case, with the union, your JSON is invalid.  Avro tags non-null 
values of unions in JSON with the intended type.  So the JSON would need to be 
{"int": 0}.

http://avro.apache.org/docs/current/spec.html#json_encoding

But I think the first example should work.  In JSON all numbers are doubles, so 
the string "0" and the string "0.0" should be treated equivalently by programs 
that process JSON, including Avro.  So I believe this is a bug.
                
> Int / Float cannot be decoded
> -----------------------------
>
>                 Key: AVRO-1099
>                 URL: https://issues.apache.org/jira/browse/AVRO-1099
>             Project: Avro
>          Issue Type: Bug
>          Components: java
>    Affects Versions: 1.6.3
>         Environment: Mac OS X 10.7.3. Eclipse IDE for Java EE Developers 
> 1.4.2.20120213
>            Reporter: John Jenkins
>              Labels: patch
>
> I am currently using a JSON library that is encoding 0 for a double to "0" 
> instead of "0.0", without the quotes. First, I feel that "0" is a perfectly 
> valid value for 0 as a double. But, I tried to code around it by changing the 
> "type" of the field to "["double", "int"]", without the quotes and it is 
> giving me this error:
> 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:229)
>       at org.apache.avro.io.parsing.Parser.advance(Parser.java:88)
>       at 
> org.apache.avro.io.ResolvingDecoder.readIndex(ResolvingDecoder.java:206)
>       at 
> org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:148)
>       at 
> org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:173)
>       at 
> org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:144)
>       at 
> org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:135)
> If I change it to just "int", then it works for a few records until it 
> reaches a double.
> Thank you,
> John

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to