This is an automated email from the ASF dual-hosted git repository. rmannibucau pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/johnzon.git
commit 34ed330ad37e2c819205342934961cb0ac449cb6 Author: Alexander Falb <[email protected]> AuthorDate: Sun Mar 31 15:42:24 2019 +0200 JOHNZON-205: add support for arrays in toStructure --- .../java/org/apache/johnzon/mapper/Mapper.java | 25 +++++++++++++++++++--- .../java/org/apache/johnzon/mapper/MapperTest.java | 21 +++++++++++++++++- .../java/org/superbiz/MultiStructureObject.java | 1 + 3 files changed, 43 insertions(+), 4 deletions(-) diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java index 77b22b6..cc5cdde 100644 --- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java +++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java @@ -39,7 +39,7 @@ import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; - +import java.util.List; import javax.json.JsonArray; import javax.json.JsonBuilderFactory; import javax.json.JsonObject; @@ -146,12 +146,31 @@ public class Mapper implements Closeable { if (BigInteger.class.isInstance(object)) { return provider.createValue(BigInteger.class.cast(object)); } + final JsonObjectGenerator objectGenerator = new JsonObjectGenerator(builderFactory); - writeObject(object, objectGenerator, null, - isDeduplicateObjects(object.getClass()) ? new JsonPointerTracker(null, "/") : null); + if (object.getClass().isArray()) { + writeObject(objectToList(object), objectGenerator, null, + isDeduplicateObjects(object.getClass()) ? new JsonPointerTracker(null, "/") : null); + } else { + writeObject(object, objectGenerator, null, + isDeduplicateObjects(object.getClass()) ? new JsonPointerTracker(null, "/") : null); + } return objectGenerator.getResult(); } + private List objectToList(Object object) { + if (Object[].class.isInstance(object)) { + return asList(Object[].class.cast(object)); + } + + int size = Array.getLength(object); + Object[] out = new Object[size]; + for (int i = 0; i < size; i++) { + out[i] = Array.get(object, i); + } + return asList(out); + } + public void writeObject(final Object object, final Writer stream) { if (JsonValue.class.isInstance(object) || Boolean.class.isInstance(object) || String.class.isInstance(object) || Number.class.isInstance(object) diff --git a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java index 912fbb2..44e79a1 100644 --- a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java +++ b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java @@ -99,15 +99,34 @@ public class MapperTest { object.polymorphic.put("b", "2"); object.nesteds = Collections.singletonList(n1); object.nestedMap = Collections.singletonMap("n1", n1); + object.anArray = new int[]{3, 4, 5}; final JsonValue structure = new MapperBuilder().setAttributeOrder(String.CASE_INSENSITIVE_ORDER).build().toStructure(object); assertEquals(JsonValue.ValueType.OBJECT, structure.getValueType()); final JsonObject jsonObject = structure.asJsonObject(); - assertEquals("{\"data\":\"some\",\"names\":[\"first\",\"second\"],\"nestedMap\":{\"n1\":{\"number\":3}}," + + assertEquals("{\"anArray\":[3,4,5],\"data\":\"some\",\"names\":[\"first\",\"second\"],\"nestedMap\":{\"n1\":{\"number\":3}}," + "\"nesteds\":[{\"number\":3}],\"polymorphic\":{\"a\":1,\"b\":\"2\"}}", jsonObject.toString()); } @Test + public void mapToJsonArray() { + int[] anArray = new int[]{3, 4, 5}; + final JsonValue structure = new MapperBuilder().build().toStructure(anArray); + assertEquals(JsonValue.ValueType.ARRAY, structure.getValueType()); + final JsonArray jsonArray = structure.asJsonArray(); + assertEquals("[3,4,5]", jsonArray.toString()); + } + + @Test + public void mapToJsonList() { + List<Integer> anList = asList(3,4,5); + final JsonValue structure = new MapperBuilder().build().toStructure(anList); + assertEquals(JsonValue.ValueType.ARRAY, structure.getValueType()); + final JsonArray jsonArray = structure.asJsonArray(); + assertEquals("[3,4,5]", jsonArray.toString()); + } + + @Test public void ignoreAllStrategy() { final StringWriter writer = new StringWriter(); final Child object = new Child(); diff --git a/johnzon-mapper/src/test/java/org/superbiz/MultiStructureObject.java b/johnzon-mapper/src/test/java/org/superbiz/MultiStructureObject.java index 3207c43..0aa04f3 100644 --- a/johnzon-mapper/src/test/java/org/superbiz/MultiStructureObject.java +++ b/johnzon-mapper/src/test/java/org/superbiz/MultiStructureObject.java @@ -27,6 +27,7 @@ public class MultiStructureObject { public Collection<Nested> nesteds; public Map<String, Nested> nestedMap; public Collection<String> names; + public int[] anArray; public static class Nested { public int number;
