Вы не указали, какую библиотеку вы используете, поэтому я предлагаю использовать Jackson
, которая позволяет быструю и простую десериализацию от модели JSON
до Java
и от одной POJO
к другой.Если вы не можете изменить класс или класс принадлежит библиотеке 3-rd party
, вы всегда можете использовать MixIn
функцию .Ниже приведен пример того, как:
- десериализация
JSON
до IvrRequest
- десериализация
JSON
в IvrMapper
- преобразование
IvrRequest
в IvrMapper
Простое приложение:
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.util.List;
public class JsonApp {
public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
ObjectMapper mapper = new ObjectMapper();
mapper.addMixIn(IvrMapper.class, IvrMapperMixIn.class);
System.out.println("Parse IvrRequest model: ");
IvrRequest ivrRequest = mapper.readValue(jsonFile, IvrRequest.class);
System.out.println(ivrRequest);
System.out.println("Parse IvrMapper model: ");
System.out.println(mapper.readValue(jsonFile, IvrMapper.class));
System.out.println("Convert IvrRequest to IvrMapper");
System.out.println(mapper.convertValue(ivrRequest, IvrMapper.class));
}
}
@JsonIgnoreProperties(ignoreUnknown = true)
interface IvrMapperMixIn {
@JsonProperty("age")
int getId();
@JsonProperty("children")
List<IvrMapper> getResourceElements();
}
class IvrRequest {
private int age;
private String name;
private String address;
private List<IvrRequest> children;
// getters, setters, toString
}
class IvrMapper {
private int id;
private String name;
private List<IvrMapper> resourceElements;
// getters, setters, toString
}
Над отпечатками приложений:
Parse IvrRequest model:
age=16, name='Rohit', address='adgsgdsdfgsdfgsf'
children=
age=16, name='Rohit', address='adgsgdsdfgsdfgsf'
children=
age=16, name='Rohit', address='adgsgdsdfgsdfgsf'
age=45, name='Singh', address='45afasdfas54df6asdf'
children=
age=55, name='nitin', address='@%^%@#^Ghagdhasdhg'
Parse IvrMapper model:
id=16, name='Rohit'
resourceElements=
id=16, name='Rohit'
resourceElements=
id=16, name='Rohit'
id=45, name='Singh'
resourceElements=
id=55, name='nitin'
Convert IvrRequest to IvrMapper
id=16, name='Rohit'
resourceElements=
id=16, name='Rohit'
resourceElements=
id=16, name='Rohit'
id=45, name='Singh'
resourceElements=
id=55, name='nitin'