From 3ca89dadb5518630a48c62f5fe0c745a7b8fc242 Mon Sep 17 00:00:00 2001 From: Shautvast Date: Sun, 25 Jun 2023 14:08:36 +0200 Subject: [PATCH] V1.1 support for UUID and Big numbers --- jmh/pom.xml | 2 +- lib/pom.xml | 2 +- .../nl/sanderhautvast/json/ser/Mapper.java | 125 ++++-------------- .../json/ser/JacksonComparisonTest.java | 6 +- .../sanderhautvast/json/ser/nested/Bean1.java | 8 +- pom.xml | 8 +- 6 files changed, 34 insertions(+), 117 deletions(-) diff --git a/jmh/pom.xml b/jmh/pom.xml index 459f04c..139f0b0 100644 --- a/jmh/pom.xml +++ b/jmh/pom.xml @@ -10,7 +10,7 @@ JsonToy-JMH jsonthingy-jmhtests - ${project.version} + 1.1 jar diff --git a/lib/pom.xml b/lib/pom.xml index 02630dd..c8edd04 100644 --- a/lib/pom.xml +++ b/lib/pom.xml @@ -10,7 +10,7 @@ JsonToy jsonthingy - ${project.version} + 1.1 jar diff --git a/lib/src/main/java/nl/sanderhautvast/json/ser/Mapper.java b/lib/src/main/java/nl/sanderhautvast/json/ser/Mapper.java index 06fbc6a..130ed97 100644 --- a/lib/src/main/java/nl/sanderhautvast/json/ser/Mapper.java +++ b/lib/src/main/java/nl/sanderhautvast/json/ser/Mapper.java @@ -5,6 +5,8 @@ import org.objectweb.asm.ClassWriter; import java.io.IOException; import java.lang.reflect.InvocationTargetException; +import java.math.BigDecimal; +import java.math.BigInteger; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -17,16 +19,6 @@ public class Mapper { private static final Map, BaseMapper> mappers = new ConcurrentHashMap<>(); private static final ByteClassLoader generatedClassesLoader = new ByteClassLoader(); - private static final StringMapper stringMapper = new StringMapper(); - private static final BooleanMapper booleanMapper = new BooleanMapper(); - - private static final IntegerMapper integerMapper = new IntegerMapper(); - private static final LongMapper longMapper = new LongMapper(); - private static final ShortMapper shortMapper = new ShortMapper(); - private static final ByteMapper byteMapper = new ByteMapper(); - private static final CharMapper charMapper = new CharMapper(); - private static final FloatMapper floatMapper = new FloatMapper(); - private static final DoubleMapper doubleMapper = new DoubleMapper(); /** @@ -49,7 +41,7 @@ public class Mapper { return b.toString(); } - @SuppressWarnings({"unchecked", "rawtypes"}) + @SuppressWarnings({"unchecked", "rawtypes", "UnnecessaryToStringCall"}) public static void json(StringBuilder b, Object value) { if (value == null) { b.append("null"); @@ -80,25 +72,26 @@ public class Mapper { } else if (value instanceof Map) { object(b, (Map) value); } else { - if (type.equals(String.class)) { - stringMapper.json(b, (String) value); - } else if (type.equals(Boolean.class)) { - - booleanMapper.json(b, (Boolean) value); - } else if (type.equals(Integer.class)) { - integerMapper.json(b, (Integer) value); - } else if (type.equals(Long.class)) { - longMapper.json(b, (Long) value); - } else if (type.equals(Short.class)) { - shortMapper.json(b, (Short) value); - } else if (type.equals(Byte.class)) { - byteMapper.json(b, (Byte) value); - } else if (type.equals(Character.class)) { - charMapper.json(b, (Character) value); - } else if (type.equals(Float.class)) { - floatMapper.json(b, (Float) value); - } else if (type.equals(Double.class)) { - doubleMapper.json(b, (Double) value); + if (type == String.class) { + b.append("\""); + Mapper.escape(b, (String) value); + b.append("\""); + } else if (type == Character.class) { + b.append("\""); + Mapper.escape(b, (Character) value); + b.append("\""); + } else if (type == Boolean.class + || type == Integer.class + || type == Long.class + || type == Float.class + || type == Double.class + || type == UUID.class + || type == Byte.class + || type == Short.class + || type == BigInteger.class + || type == BigDecimal.class + ) { + b.append(value.toString()); // prevents another nullcheck } else { BaseMapper mapper = mappers.computeIfAbsent(type, key -> createObjectMapper(type)); mapper.json(b, value); @@ -402,77 +395,5 @@ public class Mapper { } } -class BooleanMapper extends BaseMapper { - @Override - public void json(StringBuilder b, Boolean value) { - b.append(value); - } -} -class ShortMapper extends BaseMapper { - - @Override - public void json(StringBuilder b, Short value) { - b.append(value); - } -} - -class StringMapper extends BaseMapper { - @Override - public void json(StringBuilder b, String value) { - b.append("\""); - Mapper.escape(b, value); - b.append("\""); - } -} - -class IntegerMapper extends BaseMapper { - - @Override - public void json(StringBuilder b, Integer value) { - b.append(value); - } -} - -class LongMapper extends BaseMapper { - - @Override - public void json(StringBuilder b, Long value) { - b.append(value); - } -} - -class ByteMapper extends BaseMapper { - - @Override - protected void json(StringBuilder b, Byte value) { - b.append(value); - } -} - -class CharMapper extends BaseMapper { - - @Override - protected void json(StringBuilder b, Character value) { - b.append("\""); - Mapper.escape(b, value); - b.append("\""); - } -} - -class FloatMapper extends BaseMapper { - - @Override - protected void json(StringBuilder b, Float value) { - b.append(value); - } -} - -class DoubleMapper extends BaseMapper { - - @Override - protected void json(StringBuilder b, Double value) { - b.append(value); - } -} \ No newline at end of file diff --git a/lib/src/test/java/nl/sanderhautvast/json/ser/JacksonComparisonTest.java b/lib/src/test/java/nl/sanderhautvast/json/ser/JacksonComparisonTest.java index a73e3fd..f98ed63 100644 --- a/lib/src/test/java/nl/sanderhautvast/json/ser/JacksonComparisonTest.java +++ b/lib/src/test/java/nl/sanderhautvast/json/ser/JacksonComparisonTest.java @@ -22,7 +22,7 @@ public class JacksonComparisonTest { ObjectMapper objectMapper = new ObjectMapper(); Bean1 bean1 = new Bean1(); Bean2 bean2 = new Bean2(); - bean1.setData1(UUID.randomUUID().toString()); + bean1.setData1(UUID.randomUUID()); bean1.setBean2(bean2); bean2.setData2(UUID.randomUUID().toString()); String valueAsString; @@ -34,7 +34,7 @@ public class JacksonComparisonTest { for (int i = 0; i < INNERLOOP_COUNT; i++) { bean1 = new Bean1(); bean2 = new Bean2(); - bean1.setData1(UUID.randomUUID().toString()); + bean1.setData1(UUID.randomUUID()); bean1.setBean2(bean2); bean2.setData2(UUID.randomUUID().toString()); valueAsString = objectMapper.writeValueAsString(bean1); @@ -47,7 +47,7 @@ public class JacksonComparisonTest { for (int i = 0; i < INNERLOOP_COUNT; i++) { bean1 = new Bean1(); bean2 = new Bean2(); - bean1.setData1(UUID.randomUUID().toString()); + bean1.setData1(UUID.randomUUID()); bean1.setBean2(bean2); bean2.setData2(UUID.randomUUID().toString()); jsonString = Mapper.json(bean1); diff --git a/lib/src/test/java/nl/sanderhautvast/json/ser/nested/Bean1.java b/lib/src/test/java/nl/sanderhautvast/json/ser/nested/Bean1.java index 4ac2838..a2c6d5f 100644 --- a/lib/src/test/java/nl/sanderhautvast/json/ser/nested/Bean1.java +++ b/lib/src/test/java/nl/sanderhautvast/json/ser/nested/Bean1.java @@ -1,16 +1,18 @@ package nl.sanderhautvast.json.ser.nested; +import java.util.UUID; + @SuppressWarnings("unused") public class Bean1 { - private String data1; + private UUID data1; private Bean2 bean2; - public String getData1() { + public UUID getData1() { return data1; } - public void setData1(String data1) { + public void setData1(UUID data1) { this.data1 = data1; } diff --git a/pom.xml b/pom.xml index 954ed33..fad778f 100644 --- a/pom.xml +++ b/pom.xml @@ -5,15 +5,9 @@ JsonToy nl.sander jsonthingy-pom - 1.0 + 1.1 pom - - 9 - 9 - UTF-8 - - lib jmh