diff --git a/json-org/src/main/java/com/fasterxml/jackson/datatype/jsonorg/JSONArrayDeserializer.java b/json-org/src/main/java/com/fasterxml/jackson/datatype/jsonorg/JSONArrayDeserializer.java index 5d829829..88eb16f4 100644 --- a/json-org/src/main/java/com/fasterxml/jackson/datatype/jsonorg/JSONArrayDeserializer.java +++ b/json-org/src/main/java/com/fasterxml/jackson/datatype/jsonorg/JSONArrayDeserializer.java @@ -66,7 +66,7 @@ public JSONArray deserialize(JsonParser p, DeserializationContext ctxt) array.put(p.getNumberValue()); continue; case VALUE_NUMBER_FLOAT: - array.put(p.getNumberValue()); + array.put(p.getDecimalValue()); continue; case VALUE_EMBEDDED_OBJECT: array.put(p.getEmbeddedObject()); diff --git a/json-org/src/main/java/com/fasterxml/jackson/datatype/jsonorg/JSONObjectDeserializer.java b/json-org/src/main/java/com/fasterxml/jackson/datatype/jsonorg/JSONObjectDeserializer.java index 2f8d4ed0..13a51a75 100644 --- a/json-org/src/main/java/com/fasterxml/jackson/datatype/jsonorg/JSONObjectDeserializer.java +++ b/json-org/src/main/java/com/fasterxml/jackson/datatype/jsonorg/JSONObjectDeserializer.java @@ -63,7 +63,7 @@ public JSONObject deserialize(JsonParser p, DeserializationContext ctxt) ob.put(fieldName, p.getNumberValue()); continue; case VALUE_NUMBER_FLOAT: - ob.put(fieldName, p.getNumberValue()); + ob.put(fieldName, p.getDecimalValue()); continue; case VALUE_EMBEDDED_OBJECT: ob.put(fieldName, p.getEmbeddedObject()); diff --git a/json-org/src/test/java/com/fasterxml/jackson/datatype/jsonorg/SimpleReadTest.java b/json-org/src/test/java/com/fasterxml/jackson/datatype/jsonorg/SimpleReadTest.java index 012f60c0..c74d6348 100644 --- a/json-org/src/test/java/com/fasterxml/jackson/datatype/jsonorg/SimpleReadTest.java +++ b/json-org/src/test/java/com/fasterxml/jackson/datatype/jsonorg/SimpleReadTest.java @@ -4,7 +4,7 @@ import org.json.*; -import com.fasterxml.jackson.datatype.jsonorg.JsonOrgModule; +import java.math.BigDecimal; public class SimpleReadTest extends ModuleTestBase { @@ -46,4 +46,23 @@ public void testReadArray() throws Exception JSONArray array2 = array.getJSONArray(6); assertEquals(0, array2.length()); } + + public void testBigInteger() throws Exception + { + ObjectMapper mapper = new ObjectMapper(); + mapper.registerModule(new JsonOrgModule()); + + JSONObject val = mapper.readValue("{\"val\":2e308}", JSONObject.class); + assertEquals(new BigDecimal("2e308").toBigInteger(), val.getBigInteger("val")); + } + + public void testBigIntegerArray() throws Exception + { + ObjectMapper mapper = new ObjectMapper(); + mapper.registerModule(new JsonOrgModule()); + + JSONArray array = mapper.readValue("[2e308]", JSONArray.class); + assertEquals(1, array.length()); + assertEquals(new BigDecimal("2e308").toBigInteger(), array.getBigInteger(0)); + } }