Я пытаюсь создать службу, которая читает файл XML и дает ответ в формате Json, но я получаю дубликаты в ответе JSON.
Пожалуйста, дайте мне знать, что я делаю неправильно.
У меня есть сложный тип XML, поэтому я создал 3 класса POJO.
в настоящее время я получаю дубликат ответа json, например
для шоколада, есть 2 категории ежедневного молока и другие, поэтому я получаю 4 ответа в разделе Шоколад 2 для ежедневного молока и 2 для других
XML:
<?xml version="1.0"?>
<catalog>
<product productsname="Choclates">
<Parameters total="2">
<Subtype name="dairy milk">
<type>oreo</type>
<type>Silk</type>
<type>nuts</type>
</Subtype>
<Subtype name="Other">
<type>perk</type>
<type>kitkat</type>
<type>5 star</type>
</Subtype>
</Parameters>
</product>
<product productsname="Biscuits">
<Parameters total="3">
<Subtype name="parle">
<type>parle G</type>
<type>krack jack</type>
<type>monaco</type>
</Subtype>
<Subtype name="britannia">
<type>good day</type>
<type>50 50</type>
<type>bourbon</type>
<type>tiger</type>
</Subtype>
<Subtype name="Priya Gold">
<type>Italiano Cookies</type>
<type>Glucose V</type>
<type>Butter Bite</type>
<type>CNC</type>
<type>Marie Lite</type>
<type>Classic Cream</type>
</Subtype>
</Parameters>
</product>
</catalog>
Классы Pojo
public class product {
private String product_name;
private String parameter;
public List<Subtype> allsubtypes = new ArrayList<Subtype>();
------------getter, setters-------
public class Subtype {
String sybtype;
public List<Type> alltests = new ArrayList<Type>();
------------getter, setters-------
public class Type {
String types;
------------getter, setters-------
Класс XMLParser
public List<product> getDetails() {
List<product> prods = new ArrayList<product>();
org.jdom2.Document jdomDoc;
try {
jdomDoc = useDOMParser(new File("Products.xml"));
List<org.jdom2.Element> products = jdomDoc.getRootElement().getChildren("product");
for (org.jdom2.Element product : products) {
product prod = new product();
prod.setProduct_name(product.getAttributeValue("productsname"));
List<org.jdom2.Element> subtypes = product.getChild("Parameters").getChildren("Subtype");
List<Subtype> listsubtype = new ArrayList<Subtype>();
for (org.jdom2.Element subtype : subtypes) {
Subtype subt = new Subtype();
subt.setSybtype(subtype.getAttributeValue("name"));
List<org.jdom2.Element> types = subtype.getChildren("type");
List<Type> listtype = new ArrayList<Type>();
for (org.jdom2.Element type : types) {
Type typ = new Type();
typ.setTypes(type.getText());
listtype.add(typ);
}
subt.setAlltests(listtype);
listsubtype.add(subt);
}
prod.setAlltests(listsubtype);
prods.add(prod);
}
} catch (Exception e) {
e.printStackTrace();
}
return prods;
}
private static org.jdom2.Document useDOMParser(File fileName)
throws ParserConfigurationException, SAXException, IOException {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
dbFactory.setIgnoringComments(true);
DocumentBuilder dBuilder;
dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fileName);
DOMBuilder domBuilder = new DOMBuilder();
return domBuilder.build(doc);
}
Класс преобразователя JSON
public class ObjectToJson {
public static void main(String[] args) {
XMLParser xml = new XMLParser();
ObjectMapper mapper = new ObjectMapper();
List<product> prods = new ArrayList<product>();
prods = xml.getDetails();
for (product p : prods) {
try {
System.out.println("**********************************************");
String jsonInString2 = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(p);
System.out.println(jsonInString2);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
**********************************************
{
"product_name" : "Choclates",
"parameter" : null,
"allsubtypes" : [ {
"sybtype" : "dairy milk",
"alltests" : [ {
"types" : "oreo"
}, {
"types" : "Silk"
}, {
"types" : "nuts"
} ]
}, {
"sybtype" : "Other",
"alltests" : [ {
"types" : "perk"
}, {
"types" : "kitkat"
}, {
"types" : "5 star"
} ]
} ],
"alltests" : [ {
"sybtype" : "dairy milk",
"alltests" : [ {
"types" : "oreo"
}, {
"types" : "Silk"
}, {
"types" : "nuts"
} ]
}, {
"sybtype" : "Other",
"alltests" : [ {
"types" : "perk"
}, {
"types" : "kitkat"
}, {
"types" : "5 star"
} ]
} ]
}
**********************************************
{
"product_name" : "Biscuits",
"parameter" : null,
"allsubtypes" : [ {
"sybtype" : "parle",
"alltests" : [ {
"types" : "parle G"
}, {
"types" : "krack jack"
}, {
"types" : "monaco"
} ]
}, {
"sybtype" : "britannia",
"alltests" : [ {
"types" : "good day"
}, {
"types" : "50 50"
}, {
"types" : "bourbon"
}, {
"types" : "tiger"
} ]
}, {
"sybtype" : "Priya Gold",
"alltests" : [ {
"types" : "Italiano Cookies"
}, {
"types" : "Glucose V"
}, {
"types" : "Butter Bite"
}, {
"types" : "CNC"
}, {
"types" : "Marie Lite"
}, {
"types" : "Classic Cream"
} ]
} ],
"alltests" : [ {
"sybtype" : "parle",
"alltests" : [ {
"types" : "parle G"
}, {
"types" : "krack jack"
}, {
"types" : "monaco"
} ]
}, {
"sybtype" : "britannia",
"alltests" : [ {
"types" : "good day"
}, {
"types" : "50 50"
}, {
"types" : "bourbon"
}, {
"types" : "tiger"
} ]
}, {
"sybtype" : "Priya Gold",
"alltests" : [ {
"types" : "Italiano Cookies"
}, {
"types" : "Glucose V"
}, {
"types" : "Butter Bite"
}, {
"types" : "CNC"
}, {
"types" : "Marie Lite"
}, {
"types" : "Classic Cream"
} ]
} ]
}