Java 为什么我要多次获取数据?
我正在使用JavaPOJO类创建json。在这种情况下,只有当我循环遍历某个值时,它才会在json中多次打印该值 这是我的java类:-Java 为什么我要多次获取数据?,java,json,Java,Json,我正在使用JavaPOJO类创建json。在这种情况下,只有当我循环遍历某个值时,它才会在json中多次打印该值 这是我的java类:- public class App { public static void main(String[] args) { ObjectMapper mapper = new ObjectMapper(); MyPojo myPojo = createDummy(); String jsonString;
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;
}
}
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;
}
}
我希望我的json输出如下:-
如何得到这个
{
"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}
]
}
]
}]
};
您正在重用列表
aChild1
和aChild2
您必须理解,在Java中将对象分配给引用不会创建副本。它只是使该引用引用该对象(因此称为名称引用)
您需要将这些列表移动到循环中,以便为每个孩子创建一个新列表。通常,您应该始终声明变量并在需要它们的地方创建对象,而不是更早。这将使您的代码更具可读性,并防止您现在遇到的错误:
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);
@幽灵猫现在我把所有的东西都贴出来了。请帮帮我,到底是什么问题?您正在创建一个包含3个比哈尔邦、每个比哈尔邦6个帕特纳和每个帕特纳2个CSE的列表。我可以看到的一个问题是,您正在为每个元素重用完全相同的列表,因此它们之间有共享的列表。要解决这个问题,您需要在适当的循环中重新初始化列表。更好,但仍然缺少:实际输出是什么。意思:不要让它来计算你的代码创建了什么,以及它如何偏离你的预期?@Rockers Upvote支持快速学习如何提问,现在对于问题,你需要根据预期的输出验证你的循环。我想你在期待这个{“名字”:“州”,“孩子们”:[{“名字”:“比哈尔”,“孩子们”:[{“名字”:“帕特纳”,“孩子们”:[{“名字”:“CSE”,“大小”:0},]}}请遵循说明,您必须提供您期望的内容,这有助于我们具体回答非常好的答案,并提供许多有用的提示!
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;
}
}
{
"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}
]
}
]
}]
};
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);
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);