13
13
*/
14
14
public class JacksonJrsTreeCodec extends TreeCodec
15
15
{
16
- public static JrsMissing MISSING = JrsMissing .instance ;
17
16
protected final ObjectCodec _objectCodec ;
18
17
19
18
// @since 2.17
20
19
protected boolean _failOnDuplicateKeys ;
21
-
20
+ protected boolean _useBigDouble ;
21
+
22
22
public JacksonJrsTreeCodec () {
23
23
this (null );
24
24
}
@@ -28,10 +28,11 @@ public JacksonJrsTreeCodec(ObjectCodec codec) {
28
28
}
29
29
30
30
// @since 2.17
31
- public void setFailOnDuplicateKeys (boolean state ) {
32
- _failOnDuplicateKeys = state ;
31
+ public void setFailOnDuplicateKeys (boolean failOnDuplicateKeys ,boolean useBigDouble ) {
32
+ _failOnDuplicateKeys = failOnDuplicateKeys ;
33
+ _useBigDouble = useBigDouble ;
33
34
}
34
-
35
+
35
36
@ SuppressWarnings ("unchecked" )
36
37
@ Override
37
38
public <T extends TreeNode > T readTree (JsonParser p ) throws IOException {
@@ -50,7 +51,16 @@ private JrsValue nodeFrom(JsonParser p) throws IOException
50
51
return JrsBoolean .FALSE ;
51
52
case JsonTokenId .ID_NUMBER_INT :
52
53
case JsonTokenId .ID_NUMBER_FLOAT :
53
- return new JrsNumber (p .getNumberValue ());
54
+ if (_useBigDouble ) {
55
+ JsonParser .NumberType n = p .getNumberType ();
56
+ if (n == JsonParser .NumberType .FLOAT ) {
57
+ return new JrsNumber (p .getFloatValue ());
58
+ }
59
+ if (n == JsonParser .NumberType .DOUBLE ) {
60
+ return new JrsNumber (p .getDoubleValue ());
61
+ }
62
+ }
63
+ return new JrsNumber (p .getDecimalValue ());
54
64
case JsonTokenId .ID_STRING :
55
65
return new JrsString (p .getText ());
56
66
case JsonTokenId .ID_START_ARRAY : {
0 commit comments