Ola pessoal,
Estou tentando serializar um objeto para Json com XStream do java de forma que a estrutura fique correta e completa.
Eu serializei um arquivo no formato xml e usei o site https://dataconverter.curiousconcept.com/ para converter ele para json.
Depois, eu serializei com xstream para o formato Json(JsonHierarchicalStreamDriver) e Gson(gson.toJson()).
O problema é que a estrutura do xml convertido para Json pelo site é diferente da estrutura gerada pelo Json e pelo Gson do xstream. Entretanto, as estruturas do Json e Gson gerada pelo xstream estão iguais.
Segue, na sequencia de cima pra baixo, xml gerada pelo xstream, xml convertido para Json pelo site e Json gerada pelo xstream.
<list> <Student studentId="1"> <rollNo>1</rollNo> <firstName>Mahesh</firstName> <lastName>Parashar</lastName> <className>1st</className> <address> <area>H.No. 16/3, Preet Vihar.</area> <city>Delhi</city> <state>Delhi</state> <country>India</country> <pincode>110012</pincode> </address> </Student> <Student studentId="2"> <rollNo>2</rollNo> <firstName>Mahesh</firstName> <lastName>Parashar</lastName> <className>1st</className> <address> <area>H.No. 16/3, Preet Vihar.</area> <city>Delhi</city> <state>Delhi</state> <country>India</country> <pincode>110012</pincode> </address> </Student> <Student studentId="3"> <rollNo>3</rollNo> <firstName>Mahesh</firstName> <lastName>Parashar</lastName> <className>1st</className> <address> <area>H.No. 16/3, Preet Vihar.</area> <city>Delhi</city> <state>Delhi</state> <country>India</country> <pincode>110012</pincode> </address> </Student> </list>
{
“list”: {
“Student”: [
{
“rollNo”: “1”,
“firstName”: “Mahesh”,
“lastName”: “Parashar”,
“className”: “1st”,
“address”: {
“area”: “H.No. 16/3, Preet Vihar.”,
“city”: “Delhi”,
“state”: “Delhi”,
“country”: “India”,
“pincode”: “110012”
},
“@attributes”: {
“studentId”: “1”
}
},
{
“rollNo”: “2”,
“firstName”: “Mahesh”,
“lastName”: “Parashar”,
“className”: “1st”,
“address”: {
“area”: “H.No. 16/3, Preet Vihar.”,
“city”: “Delhi”,
“state”: “Delhi”,
“country”: “India”,
“pincode”: “110012”
},
“@attributes”: {
“studentId”: “2”
}
},
{
“rollNo”: “3”,
“firstName”: “Mahesh”,
“lastName”: “Parashar”,
“className”: “1st”,
“address”: {
“area”: “H.No. 16/3, Preet Vihar.”,
“city”: “Delhi”,
“state”: “Delhi”,
“country”: “India”,
“pincode”: “110012”
},
“@attributes”: {
“studentId”: “3”
}
}
]
}
}`
[ { "rollNo": 1, "id": 1, "firstName": "Mahesh", "lastName": "Parashar", "className": "1st", "address": { "area": "H.No. 16/3, Preet Vihar.", "city": "Delhi", "state": "Delhi", "country": "India", "pincode": 110012 } }, { "rollNo": 2, "id": 2, "firstName": "Mahesh", "lastName": "Parashar", "className": "1st", "address": { "area": "H.No. 16/3, Preet Vihar.", "city": "Delhi", "state": "Delhi", "country": "India", "pincode": 110012 } }, { "rollNo": 3, "id": 3, "firstName": "Mahesh", "lastName": "Parashar", "className": "1st", "address": { "area": "H.No. 16/3, Preet Vihar.", "city": "Delhi", "state": "Delhi", "country": "India", "pincode": 110012 } } ]
Estrutura do código:
`@XStreamAlias(“Student”)
public class Student {
private int rollNo;
@XStreamAlias("studentId")
@XStreamAsAttribute
private int id;
private String firstName;
private String lastName;
private String className;
private Address address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getRollNo() {
return rollNo;
}
public void setRollNo(int rollNo) {
this.rollNo = rollNo;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public class XStreamTester {
public static void main(String args[]) {
ArrayList objectList2 = new ArrayList();
XStreamTester tester = new XStreamTester();
XStream xstream = new XStream(new DomDriver());
xstream.autodetectAnnotations(true);
xstream.setMode(XStream.NO_REFERENCES);
XStream xstreamJson = new XStream(new JsonHierarchicalStreamDriver() {
public HierarchicalStreamWriter createWriter(Writer writer) {
return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE);
}
});
objectList2 = tester.getStudentDetails(3);
String xml = xstream.toXML(objectList2);
System.out.println(“xml do student:\n” +xml + “\n”);
//Object to Json version using GSON
Gson gson = new Gson();
String json = gson.toJson(objectList2);
System.out.println(json + "\n");
}
private ArrayList getStudentDetails(int contador) {
Student student = null;
Address address = null;
ArrayList<Object> objectList = new ArrayList<Object>();
int contadorr = 1;
while(contadorr <= contador) {
System.out.println(contadorr + " " + contador);
student = new Student();
address = new Address();
student.setId(contadorr);
student.setFirstName("Mahesh");
student.setLastName("Parashar");
student.setRollNo(contadorr);
student.setClassName("1st");
address.setArea("H.No. 16/3, Preet Vihar.");
address.setCity("Delhi");
address.setState("Delhi");
address.setCountry("India");
address.setPincode(110012);
student.setAddress(address);
contadorr++;
objectList.add(student);
}
return objectList;
}
}
`