I have already written a code to convert a nested object to flat Map<string, Object>. I need your help to convert the flat Map<String, Object> to a nested object.
For example:
Class BaseModel implements Serializable{}
Class A : BaseModel{
String test;
int testInt;
B b;
}
Class B : BaseModel{
Double testDouble;
List<C> c;
}
Class C : BaseModel{
float testFloat;
}
An object of Class A will be represented as JSON form as below:
{
"test": "t",
"testInt": 1,
"b": {
"testDouble": 1.1,
"c": [{
"testFloat": 1.2
}]
}
}
Using my function mentioned below:
public static Map<String, Object> getDataForProcess(BaseModel model, String fieldName){
Map<String, Object> m = new HashMap<String, Object>();
Class<?> thisClass = null;
try {
if(model != null){
thisClass = Class.forName(model.getClass().getName());
Field[] aClassFields = thisClass.getDeclaredFields();
for(Field f : aClassFields){
String fName = null;
if(fieldName != null && fieldName.length() > 0){
fName = fieldName + "_" +f.getName();
} else {
fName = f.getName();
}
if(BaseModel.class.isAssignableFrom(f.getType())){
BaseModel labModel = (BaseModel)f.get(model);
Map<String, Object> mapFromObject = getDataForProcess(labModel, fName);
m.putAll(mapFromObject);
} else if(List.class.isAssignableFrom(f.getType())){
@SuppressWarnings("unchecked")
List<BaseModel> list = (List<BaseModel>)f.get(model);
for(int i=0;i<list.size();i++){
Map<String, Object> mapFromList = getDataForProcess(list.get(i), fName+"_"+i);
m.putAll(mapFromList);
}
} else {
if(!fName.contains("serialVersionUID")){
m.put(fName, f.get(model));
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return m;
}
The nested object will be converted as:
{
"test": "t",
"testInt": 1,
"b_testDouble": 1.1,
"b_c_0_testFloat": 1.2
}
I need your help to convert the flat map back to nested object.