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 55import com .jsoniter .spi .Slice ;
66
77import java .io .IOException ;
8+ import java .math .BigInteger ;
89
910class IterImpl {
1011
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+
1117 public static final int readObjectFieldAsHash (JsonIterator iter ) throws IOException {
1218 if (readByte (iter ) != '"' ) {
1319 if (nextToken (iter ) != '"' ) {
Original file line number Diff line number Diff line change @@ -288,7 +288,15 @@ public final Object read() throws IOException {
288288 case STRING :
289289 return readString ();
290290 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 ;
292300 case NULL :
293301 IterImpl .skipFixedBytes (this , 4 );
294302 return null ;
Original file line number Diff line number Diff line change @@ -82,4 +82,9 @@ public void testBigDecimal() {
8282 BigDecimal number = JsonIterator .deserialize ("100.1" , BigDecimal .class );
8383 assertEquals (new BigDecimal ("100.1" ), number );
8484 }
85+
86+ public void testChooseDouble () {
87+ Object number = JsonIterator .deserialize ("1.1" , Object .class );
88+ assertEquals (1.1 , number );
89+ }
8590}
Original file line number Diff line number Diff line change @@ -199,4 +199,14 @@ public void testBigInteger() {
199199 BigInteger number = JsonIterator .deserialize ("100" , BigInteger .class );
200200 assertEquals (new BigInteger ("100" ), number );
201201 }
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+ }
202212}
You can’t perform that action at this time.
0 commit comments