public static Object parseObject(Class<?> targetObjectClass, JSONObject object, boolean relaxed) throws GeeklistApiException {
        GeeklistType target = createObject(targetObjectClass);
        JSONArray responseFields = object.names();

        for (int i = 0; i < responseFields.length(); i++) {
            String field = responseFields.optString(i);
            Field targetField = null;
            try {
                targetField = targetObjectClass.getDeclaredField(Utils.toCamelCase(field));
            } catch (SecurityException e) {
            } catch (NoSuchFieldException e) {
            } // Nevermind the Exceptions here...a non existing field might be not that bad ;)

            if (targetField != null) {

                Class<?> fieldClass = targetField.getType();
                targetField.setAccessible(true);
                try {
                    targetField.set(target, parseValue(fieldClass, field, object, relaxed));
                } catch (IllegalArgumentException e) {
                    throw new GeeklistApiException(e);
                } catch (IllegalAccessException e) {
                    throw new GeeklistApiException(e);
                }

            } else {
                if (!relaxed) {
                    throw new GeeklistApiException("Could not find a matching field in target object");
                }
            }
        }

        return target;
    }