private static void populateObject(Object obj, JSONObject jsonObject) {
Class<?> objClass = obj.getClass();
Field[] fields = objClass.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
String fieldName = field.getName();
if (jsonObject.containsKey(fieldName)) {
try {
if (field.getType() == String.class) {
field.set(obj, jsonObject.getString(fieldName));
} else if (field.getType() == int.class || field.getType() == Integer.class) {
field.set(obj, jsonObject.getInteger(fieldName));
} else if (field.getType() == boolean.class || field.getType() == Boolean.class) {
field.set(obj, jsonObject.getBoolean(fieldName));
} else if (field.getType() == long.class || field.getType() == Long.class) {
field.set(obj, jsonObject.getLong(fieldName));
} else if (field.getType() == double.class || field.getType() == Double.class) {
field.set(obj, jsonObject.getDouble(fieldName));
} else if (field.getType() == float.class || field.getType() == Float.class) {
field.set(obj, jsonObject.getFloat(fieldName));
} else if (field.getType() == short.class || field.getType() == Short.class) {
field.set(obj, jsonObject.getShort(fieldName));
} else if (field.getType() == byte.class || field.getType() == Byte.class) {
field.set(obj, jsonObject.getByte(fieldName));
} else if (field.getType() == char.class || field.getType() == Character.class) {
String value = jsonObject.getString(fieldName);
field.set(obj, value.length() > 0 ? value.charAt(0) : '\0');
} else if (field.getType() == List.class) {
JSONArray jsonArray = jsonObject.getJSONArray(fieldName);
ParameterizedType parameterizedType = (ParameterizedType) field.getGenericType();
Class<?> elementClass = (Class<?>) parameterizedType.getActualTypeArguments()[0];
List<Object> list = new ArrayList<>();
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject itemJson = jsonArray.getJSONObject(i);
Object item = elementClass.getDeclaredConstructor().newInstance();
populateObject(item, itemJson);
list.add(item);
}
field.set(obj, list);
} else {
if ("defaultValue".equals(fieldName)){
field.set(obj, jsonObject.get(fieldName));
}else {
JSONObject nestedObject = jsonObject.getJSONObject(fieldName);
Object nestedObj = field.getType().newInstance();
populateObject(nestedObj, nestedObject);
field.set(obj, nestedObj);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}