json-serialiser

serialising numbers as string

11/27/2018 4:57:01 AM

Details

diff --git a/src/main/java/br/ufrgs/inf/prosoft/jsonserialiser/JSONSerialiser.java b/src/main/java/br/ufrgs/inf/prosoft/jsonserialiser/JSONSerialiser.java
index cd5fcb8..e70c851 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/jsonserialiser/JSONSerialiser.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/jsonserialiser/JSONSerialiser.java
@@ -9,7 +9,6 @@ import java.io.IOException;
 import java.io.Writer;
 import java.lang.reflect.Array;
 import java.lang.reflect.Field;
-import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.ConcurrentModificationException;
@@ -140,8 +139,7 @@ public class JSONSerialiser {
                 return;
             }
             if (object instanceof Number) {
-                Number number = (Number) object;
-                serialiseNumber(number);
+                this.writer.append("\"").append(String.valueOf(object)).append("\"");
                 return;
             }
             if (object instanceof Enum) {
@@ -164,7 +162,7 @@ public class JSONSerialiser {
             }
             if (object instanceof Date) {
                 Date date = (Date) object;
-                serialiseNumber(date.getTime());
+                this.writer.append("\"").append(String.valueOf(date.getTime())).append("\"");
                 return;
             }
             if (visited.stream().anyMatch((visited) -> (visited == object))) {
@@ -313,47 +311,4 @@ public class JSONSerialiser {
             this.writer.append('"');
         }
     }
-
-    private void serialiseNumber(Number number) throws IOException {
-        // not all Numbers may match actual JSON Numbers. i.e. Fractions or Complex
-        final String numberAsString = numberToString(number);
-        try {
-            // Use the BigDecimal constructor for it's parser to validate the format.
-            @SuppressWarnings("unused")
-            BigDecimal unused = new BigDecimal(numberAsString);
-            // Close enough to a JSON number that we will return it unquoted
-            this.writer.append(numberAsString);
-        } catch (NumberFormatException ex) {
-            // The Number value is not a valid JSON number.
-            // Instead we will quote it as a string
-            serialiseString(numberAsString);
-        }
-
-    }
-
-    private String numberToString(Number number) {
-        if (number instanceof Double) {
-            if (((Double) number).isInfinite() || ((Double) number).isNaN()) {
-                return String.valueOf(number);
-            }
-        } else if (number instanceof Float) {
-            if (((Float) number).isInfinite() || ((Float) number).isNaN()) {
-                return String.valueOf(number);
-            }
-        }
-
-        // Shave off trailing zeros and decimal point, if possible.
-        String string = number.toString();
-        if (string.indexOf('.') > 0 && string.indexOf('e') < 0
-                && string.indexOf('E') < 0) {
-            while (string.endsWith("0")) {
-                string = string.substring(0, string.length() - 1);
-            }
-            if (string.endsWith(".")) {
-                string = string.substring(0, string.length() - 1);
-            }
-        }
-        return string;
-    }
-
 }