diff --git a/json-smart/src/main/java/net/minidev/json/JSONObject.java b/json-smart/src/main/java/net/minidev/json/JSONObject.java index 408e7ea..ebab072 100644 --- a/json-smart/src/main/java/net/minidev/json/JSONObject.java +++ b/json-smart/src/main/java/net/minidev/json/JSONObject.java @@ -236,7 +236,9 @@ private static JSONObject merge(JSONObject o1, JSONObject o2, boolean overwrite) protected static JSONArray merge(JSONArray o1, Object o2) { if (o2 == null) return o1; - if (o1 instanceof JSONArray) return merge(o1, (JSONArray) o2); + if (o2 instanceof JSONArray) { + return merge(o1, (JSONArray) o2); + } o1.add(o2); return o1; } diff --git a/json-smart/src/test/java/net/minidev/json/test/JSONObjectTest.java b/json-smart/src/test/java/net/minidev/json/test/JSONObjectTest.java index edb0f2b..782e69d 100644 --- a/json-smart/src/test/java/net/minidev/json/test/JSONObjectTest.java +++ b/json-smart/src/test/java/net/minidev/json/test/JSONObjectTest.java @@ -189,4 +189,46 @@ void mergeJsonObjectWithOverwriteSuccess() { jsonObject4.merge(jsonObject2, true); Assertions.assertEquals("{\"k2\":{\"k1\":\"v1\"}}", jsonObject4.toJSONString()); } + + @Test + void mergeJsonArrayWithObjectSuccess() { + JSONObject jsonObject1 = new JSONObject(); + jsonObject1.appendField("k1", "v1"); + + JSONArray jsonArray1 = new JSONArray(); + jsonArray1.add(jsonObject1); + Assertions.assertEquals("[{\"k1\":\"v1\"}]", jsonArray1.toJSONString()); + + JSONObject jsonObject2 = new JSONObject(); + jsonObject2.appendField("k2", "v2"); + + /* + test merge json object ( before fix issue #51, these will fail. + throw java.lang.ClassCastException: class net.minidev.json.JSONObject cannot be cast to class net.minidev.json.JSONArray) + */ + jsonArray1.merge(jsonObject2); + Assertions.assertEquals("[{\"k1\":\"v1\"},{\"k2\":\"v2\"}]", jsonArray1.toJSONString()); + + jsonArray1.merge("s1"); + Assertions.assertEquals("[{\"k1\":\"v1\"},{\"k2\":\"v2\"},\"s1\"]", jsonArray1.toJSONString()); + + jsonArray1.merge(1); + Assertions.assertEquals( + "[{\"k1\":\"v1\"},{\"k2\":\"v2\"},\"s1\",1]", jsonArray1.toJSONString()); + + jsonArray1.merge(true); + Assertions.assertEquals( + "[{\"k1\":\"v1\"},{\"k2\":\"v2\"},\"s1\",1,true]", jsonArray1.toJSONString()); + + // test merge json array + JSONObject jsonObject3 = new JSONObject(); + jsonObject3.appendField("k3", "v3"); + JSONArray jsonArray2 = new JSONArray(); + jsonArray2.add(jsonObject3); + + jsonArray1.merge(jsonArray2); + Assertions.assertEquals( + "[{\"k1\":\"v1\"},{\"k2\":\"v2\"},\"s1\",1,true,{\"k3\":\"v3\"}]", + jsonArray1.toJSONString()); + } }