Description
From the Avro specification re default values (and hence JSON encoding in general):
field default values | ||
avro type | json type | example |
---|---|---|
null | null | null |
boolean | boolean | true |
int,long | integer | 1 |
float,double | number | 1.1 |
bytes | string | "\u00FF" |
string | string | "foo" |
record | object | {"a": 1} |
enum | string | "FOO" |
array | array | [1] |
map | object | {"a": 1} |
fixed | string | "\u00ff" |
Note that float and double have a "json type" of number (while int, long have a "json type" of integer. In JSON an integer is a number that is constrained to be an integer. There is no way to deduce from a JSON value that has no fractional part whether that value is a number or an integer - it is either/both.
I believe that the following schema is, on that basis, valid:
"{ \"name\":\"test\", \"type\": \"record\", \"fields\": [
{\"name\": \"double\",\"type\": \"double\",\"default\" : 2 }]}",
We have a substantial body of similar schema in use but have not attempted to use C++ to resolve them before - and now this is failing.
Fix is reasonably straight forward - PR with tests:
https://github.com/apache/avro/pull/326