simdjson-java icon indicating copy to clipboard operation
simdjson-java copied to clipboard

On-demand double parsing breaks on integer values

Open SamCarlberg opened this issue 3 months ago • 0 comments
trafficstars

If a JSON stream contains an integer number, SimdJsonParser will throw a parse exception if it's given a schema where that number is represented as a double. This applies to bare numbers, object values, and array entries:

// All of these throw a parse exception
double rawDouble = new SimdJsonParser().parse("1".getBytes(UTF_8), 1, double.class);
double[] array = new SimdJsonParser().parse("[1, 2]".getBytes(UTF_8), 6, double[].class);
HasDouble box = new SimdJsonParser().parse("{\"value\": 1}".getBytes(UTF_8), 12, HasDouble.class);

record HasDouble(double value) {}

As far as I can tell, this is because NumberParser.parseDouble requires double literals to either have a decimal point or exponent part. Should that be the case? I would expect integer number values to be permitted, since they can always be widened to doubles

SamCarlberg avatar Aug 12 '25 22:08 SamCarlberg