areJsonObjectsEqual

If both null, returns true.

If exactly one is null, returns false.

If the number of keys differs, returns false.

If a key in target is missing from source, returns false.

If a key/value in target is a JSONObject, then that corresponding key/value JSONObject in source must equal according to this method, else returns false.

If a key/value in target does not return true for Object.equals for that corresponding key/value in source, then returns false.

Otherwise return true.

Note that JSONArray will also use Object.equals. If this functionality is not desired, add a corresponding case for JSONArray. Currently, the return value is undefined here.