Tenemos una lista en Java en forma de árbol y queremos convertirla a json para usarla en el front-end
List<Especialidad> treeEspecialidades = new ArrayList<Especialidad>();
El objeto Especialidad vendría siendo el nodo del árbol, y dentro tiene una lista de hijos (de tipo Especialidad también), y la lista de treeEspecialidades es la lista de los nodos raíz.
Podemos usar el modo rápido, y convertir el árbol a json con alguna librería que convierta el java a json
String json = JSONFactoryUtil.serialize(treeEspecialidades);
(en este caso JSONFactoryUtil esta en las librerías core de Liferay)
Lo malo de este método es que al ser una lista de objetos, crea mucha basura en el json, que no va a ser usada nunca.
Para crear el objeto json con los datos que se quieren y el formato que se requiera para usarlo en el front-end, se crea un método recursivo. Éste recorre todo el árbol y lo convierte a json:
private String convertTreeToJson(List<Especialidad> treeEspecialidades){
if(treeEspecialidades==null){
return "";
}
StringBuffer sb = new StringBuffer();
for(Especialidad especialidad: treeEspecialidades){
sb.append("{");
sb.append("id:\""+especialidad.getEspecialidadId()+"\",");
if(especialidad.getParent()!=null){
sb.append("parent:\""+especialidad.getParent().getEspecialidadId()+"\",");
}else{
sb.append("parent:\"#\",");
}
sb.append("text:\""+especialidad.getEspecialidad()+"\",");
if(especialidad.getHijos()!=null){
sb.append(convertTreeToJson(especialidad.getHijos()));
}
sb.append("}");
}
return sb.toString();
}
Éste método devuelve un json a manera de árbol, por ejemplo:
{
id: "1",
parent: "#",
text: "Energética",
{
id: "2",
parent: "1",
text: "Petróleo y Gas",
} {
id: "10",
parent: "1",
text: "Luz y Fuerza",
{
id: "11",
parent: "10",
text: "Luz",
{
id: "12",
parent: "11",
text: "Luz calle",
{
id: "13",
parent: "12",
text: "Luz de luces",
}
}
}
}
} {
id: "3",
parent: "#",
text: "Tecnología",
{
id: "5",
parent: "3",
text: "Desarrollo de sismtemas",
{
id: "6",
parent: "5",
text: "Programador Java",
} {
id: "9",
parent: "5",
text: "Programador .Net ligeramente mucho texto de prueba",
}
}
} {
id: "4",
parent: "#",
text: "Mercadotécnia",
{
id: "7",
parent: "4",
text: "Merca 2",
{
id: "8",
parent: "7",
text: "Hoja Merca",
}
}
}
Espero le sirva a alguien!