¿Por qué estoy recibiendo datos múltiples veces?

rockeros:

Estoy creando JSON usando clase Java POJO. En este solamente cuando estoy bucle a través de algún valor que se imprime ese valor varias veces en JSON.

Aquí está mi clase java: -

public class App {

    public static void main(String[] args) {
        ObjectMapper mapper = new ObjectMapper();
        MyPojo myPojo = createDummy();

        String jsonString;
        try 
        {
            jsonString = mapper.writeValueAsString(myPojo);
            System.out.println(jsonString);
        }
        catch (IOException e) 
        {
            e.printStackTrace();
        }
    }

    private static MyPojo createDummy() 
    {
        MyPojo myPojo = new MyPojo();
        myPojo.setName("State");

        Children child;
        ArrayList<Children> aChild = new ArrayList<>();

        Children1 child1;
        ArrayList<Children1> aChild1 = new ArrayList<>();

        Children2 child2 = null;
        ArrayList<Children2> aChild2 = new ArrayList<>();
        for(int i=0; i<3; i++)
        {
            child = new Children();
            child.setName("Bihar");

            for(int j=0; j<6; j++)
            {
                child1 = new Children1();
                child1.setName("Patna");

                for(int k=0; k<2; k++)
                {
                    child2 = new Children2();
                    child2.setName("CSE");
                    child2.setSize(4);

                    aChild2.add(child2);
                }
                child1.setChildren2(aChild2);
                aChild2.remove(child2);
                aChild1.add(child1);
            }
            child.setChildren1(aChild1);
            aChild.add(child);
        }
        myPojo.setChildren(aChild);

        return myPojo;
    }
  }

MyPojo.java clase: -

public class MyPojo 
{
    private String name;
    private ArrayList<Children> children;

    public String getName() 
    {
        return name;
    }
    public void setName(String name) 
    {
        this.name = name;
    }
    public ArrayList<Children> getChildren() 
    {
        return children;
    }
    public void setChildren(ArrayList<Children> children) 
    {
        this.children = children;
    }   
}

Children.java

public class Children {
    private String name;
    private ArrayList<Children1> children1;

    public String getName() 
    {
        return name;
    }
    public void setName(String name) 
    {
        this.name = name;
    }
    public ArrayList<Children1> getChildren1() 
    {
        return children1;
    }
    public void setChildren1(ArrayList<Children1> children1) 
    {
        this.children1 = children1;
    }

}

Children1.java

public class Children1 {
    private String name;
    private ArrayList<Children2> children2;

    public String getName() 
    {
        return name;
    }
    public void setName(String name) 
    {
        this.name = name;
    }
    public ArrayList<Children2> getChildren2() 
    {
        return children2;
    }
    public void setChildren2(ArrayList<Children2> children2) 
    {
        this.children2 = children2;
    }

}

Children2.java

public class Children2 {
    private String name;
    private int size;

    public String getName() 
    {
        return name;
    }
    public void setName(String name) 
    {
        this.name = name;
    }
    public int getSize() 
    {
        return size;
    }
    public void setSize(int size) 
    {
        this.size = size;
    }
}

Quiero que mi salida de JSON como esto: - ¿Cómo conseguir esto?

{
    "name": "State", "children": 
    [{
        "name": "Bihar",
        "children": 
        [
        {"name": "Patna",
         "children":
             [
              {"name": "CSE", "size": 0},
              {"name": "CSE", "size": 0}
             ]
        }, 
        {"name": "Patna",
         "children":
             [
              {"name": "CSE", "size": 0},
              {"name": "CSE", "size": 0}
             ]
        }
        ]
    },
     {
        "name": "Bihar",
        "children": 
        [
        {"name": "Patna",
         "children":
             [
              {"name": "CSE", "size": 0},
              {"name": "CSE", "size": 0}
             ]
        }, 
        {"name": "Patna",
         "children":
             [
              {"name": "CSE", "size": 0},
              {"name": "CSE", "size": 0}
             ]
        }
        ]
    }, 
    {
        "name": "Bihar",
        "children": 
        [
        {"name": "Patna",
         "children":
             [
              {"name": "CSE", "size": 0},
              {"name": "CSE", "size": 0}
             ]
        }, 
        {"name": "Patna",
         "children":
             [
              {"name": "CSE", "size": 0},
              {"name": "CSE", "size": 0}
             ]
        }
        ]
    }]
};
Max Vollmer:

Va a reutilizar las listas aChild1y aChild2.

Usted debe entender que la asignación de un objeto a una referencia en Java no crea una copia. Sólo hace que la referencia de referencia que objeto (de ahí el nombre de referencia ).

Es necesario mover las listas en su bucle, de manera que se crea una nueva lista de todos los niños. En general, usted debe declarar siempre las variables y crear objetos donde los necesita, no antes. Eso hace que su código mucho más legible y evita errores como que has encontrado ahora:

ArrayList<Children> aChild = new ArrayList<>();
for(int i=0; i<3; i++)
{
    Children child = new Children();
    child.setName("Bihar");

    ArrayList<Children1> aChild1 = new ArrayList<>();
    for(int j=0; j<6; j++)
    {
        Children1 child1 = new Children1();
        child1.setName("Patna");

        ArrayList<Children2> aChild2 = new ArrayList<>();
        for(int k=0; k<2; k++)
        {
            Children2 child2 = new Children2();
            child2.setName("CSE");
            child2.setSize(4);

            aChild2.add(child2);
        }
        child1.setChildren2(aChild2);
        aChild1.add(child1);
    }
    child.setChildren1(aChild1);
    aChild.add(child);
}
myPojo.setChildren(aChild);

Aparte de eso que realmente necesita para reconsiderar la forma en que nombre a sus clases y objetos. Una lista llamada aChildno tiene sentido. Es una lista después de todo y debe ser llamado children. Y por otro lado una clase llamada Childrenno tiene sentido, es una clase, por lo que debe ser llamado Child. Haga su charla código. Cuando leí aChildespero un niño , no una lista de los niños. Cuando leí Childrenespero una lista de los niños , no es una clase.

Y por último pero no menos importante, tener en cuenta lo que las clases son para. Describen la semántica y el comportamiento de los objetos que se encuentran, así, de la misma clase. Todos sus Childrenclases hacen exactamente lo mismo. No tiene sentido tener una clase Children1y una clase Children2etc. clase Sólo crear el llamado Child. Siempre trate de pensar en la realidad. Cuando hablamos de los niños humanos, ¿diría que "se trata de un niño" o si usted dice "este es un child21984305" porque así es como muchos padres vinieron antes? No claro que no. Puede numerar objetos, pero la numeración de clases no tiene sentido. La información de que un niño es de 2 niveles en su árbol es una información perteneciente al objeto, no es una información que pertenece a la clase.

He aquí un pequeño ejemplo de código del mismo código con clases y nombres propios. Usted puede notar lo mucho más legible y comprensible el código de repente es:

ArrayList<Child> children = new ArrayList<>();
for(int i=0; i<3; i++)
{
    Child child = new Child();
    child.setName("Bihar");
    children.add(child);

    ArrayList<Child> innerchildren = new ArrayList<>();
    for(int j=0; j<6; j++)
    {
        Child innerchild = new Child();
        innerchild.setName("Patna");
        innerchildren.add(innerchild);

        ArrayList<Child> innermostchildren = new ArrayList<>();
        for(int k=0; k<2; k++)
        {
            SizableChild innermostchild = new SizableChild();   // SizableChild extends Child and adds the methods setSize and getSize
            innermostchild.setName("CSE");
            innermostchild.setSize(4);

            innermostchildren.add(innermostchild);
        }
        innerchild.setChildren(innermostchildren);
    }
    child.setChildren(innerchildren);
}
myPojo.setChildren(children);

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=314642&siteId=1
Recomendado
Clasificación