File tree Expand file tree Collapse file tree 4 files changed +30
-1
lines changed Expand file tree Collapse file tree 4 files changed +30
-1
lines changed Original file line number Diff line number Diff line change 5
5
import com .jsoniter .spi .Slice ;
6
6
7
7
import java .io .IOException ;
8
+ import java .math .BigInteger ;
8
9
9
10
class IterImpl {
10
11
12
+ private static BigInteger maxLong = BigInteger .valueOf (Long .MAX_VALUE );
13
+ private static BigInteger minLong = BigInteger .valueOf (Long .MIN_VALUE );
14
+ private static BigInteger maxInt = BigInteger .valueOf (Integer .MAX_VALUE );
15
+ private static BigInteger minInt = BigInteger .valueOf (Integer .MIN_VALUE );
16
+
11
17
public static final int readObjectFieldAsHash (JsonIterator iter ) throws IOException {
12
18
if (readByte (iter ) != '"' ) {
13
19
if (nextToken (iter ) != '"' ) {
Original file line number Diff line number Diff line change @@ -288,7 +288,15 @@ public final Object read() throws IOException {
288
288
case STRING :
289
289
return readString ();
290
290
case NUMBER :
291
- return readDouble ();
291
+ double number = readDouble ();
292
+ if (number == Math .floor (number ) && !Double .isInfinite (number )) {
293
+ long longNumber = (long ) number ;
294
+ if (longNumber <= Integer .MAX_VALUE && longNumber >= Integer .MIN_VALUE ) {
295
+ return (int ) longNumber ;
296
+ }
297
+ return longNumber ;
298
+ }
299
+ return number ;
292
300
case NULL :
293
301
IterImpl .skipFixedBytes (this , 4 );
294
302
return null ;
Original file line number Diff line number Diff line change @@ -82,4 +82,9 @@ public void testBigDecimal() {
82
82
BigDecimal number = JsonIterator .deserialize ("100.1" , BigDecimal .class );
83
83
assertEquals (new BigDecimal ("100.1" ), number );
84
84
}
85
+
86
+ public void testChooseDouble () {
87
+ Object number = JsonIterator .deserialize ("1.1" , Object .class );
88
+ assertEquals (1.1 , number );
89
+ }
85
90
}
Original file line number Diff line number Diff line change @@ -199,4 +199,14 @@ public void testBigInteger() {
199
199
BigInteger number = JsonIterator .deserialize ("100" , BigInteger .class );
200
200
assertEquals (new BigInteger ("100" ), number );
201
201
}
202
+
203
+ public void testChooseInteger () {
204
+ Object number = JsonIterator .deserialize ("100" , Object .class );
205
+ assertEquals (100 , number );
206
+ }
207
+
208
+ public void testChooseLong () {
209
+ Object number = JsonIterator .deserialize (Long .valueOf (Long .MAX_VALUE ).toString (), Object .class );
210
+ assertEquals (Long .MAX_VALUE , number );
211
+ }
202
212
}
You can’t perform that action at this time.
0 commit comments