diff --git a/src/main/java/org/json/JSONObject.java b/src/main/java/org/json/JSONObject.java index 8bbb874b3..97a6df8d2 100644 --- a/src/main/java/org/json/JSONObject.java +++ b/src/main/java/org/json/JSONObject.java @@ -1370,9 +1370,21 @@ public JSONArray optJSONArray(String key) { * A key string. * @return A JSONObject which is the value. */ - public JSONObject optJSONObject(String key) { + public JSONObject optJSONObject(String key) { return this.optJSONObject(key, null); } + + /** + * Get an optional JSONObject associated with a key, or the default if there + * is no such key or if the value is not a JSONObject. + * + * @param key + * A key string. + * @param defaultValue + * The default. + * @return An JSONObject which is the value. + */ + public JSONObject optJSONObject(String key, JSONObject defaultValue) { Object object = this.opt(key); - return object instanceof JSONObject ? (JSONObject) object : null; + return object instanceof JSONObject ? (JSONObject) object : defaultValue; } /** diff --git a/src/test/java/org/json/junit/JSONObjectTest.java b/src/test/java/org/json/junit/JSONObjectTest.java index 2e296f071..0d5acdd2e 100644 --- a/src/test/java/org/json/junit/JSONObjectTest.java +++ b/src/test/java/org/json/junit/JSONObjectTest.java @@ -2404,8 +2404,8 @@ public void jsonObjectOptDefault() { MyEnum.VAL1.equals(jsonObject.optEnum(MyEnum.class, "myKey", MyEnum.VAL1))); assertTrue("optJSONArray() should return null ", null==jsonObject.optJSONArray("myKey")); - assertTrue("optJSONObject() should return null ", - null==jsonObject.optJSONObject("myKey")); + assertTrue("optJSONObject() should return default JSONObject ", + jsonObject.optJSONObject("myKey", new JSONObject("{\"testKey\":\"testValue\"}")).getString("testKey").equals("testValue")); assertTrue("optLong() should return default long", 42l == jsonObject.optLong("myKey", 42l)); assertTrue("optDouble() should return default double", @@ -2440,8 +2440,8 @@ public void jsonObjectOptNoKey() { MyEnum.VAL1.equals(jsonObject.optEnum(MyEnum.class, "myKey", MyEnum.VAL1))); assertTrue("optJSONArray() should return null ", null==jsonObject.optJSONArray("myKey")); - assertTrue("optJSONObject() should return null ", - null==jsonObject.optJSONObject("myKey")); + assertTrue("optJSONObject() should return default JSONObject ", + jsonObject.optJSONObject("myKey", new JSONObject("{\"testKey\":\"testValue\"}")).getString("testKey").equals("testValue")); assertTrue("optLong() should return default long", 42l == jsonObject.optLong("myKey", 42l)); assertTrue("optDouble() should return default double",