我正在从JSON String生成JAVA对象。但我在迭代列表项时遇到问题。这个JSON是一个嵌套数组。这是我的java代码
response.setContentType("text/html");
PrintWriter out = response.getWriter();
nString xr = request.getParameter("JSONString");
Gson gson = new Gson();
java.lang.reflect.Type type = new TypeToken<List<EmployeeJSONObj>>(){}.getType();
List<EmployeeJSONObj>l = gson.fromJson(xr, type);
List<EmployeeJSONObj>l1 = l.get(0).getChild();
for(int i=0;i<l1.size();i++)
{
out.println("Name: "+l1.get(i).getName()+"<br/>");
}
AND我的java自定义类是
public class EmployeeJSONObj {
private String name;
private List<EmployeeJSONObj> children = new LinkedList<>();
EmployeeJSONObj()
{
}
public String getName()
{
return name;
}
public List<EmployeeJSONObj> getChild()
{
return children;
}
public String toString() {
return "name: " + name + ", children = " + children;
}
}
AND JSON String来自HTML隐藏字段,这是我的json字符串
String str = "[{" +
" \"name\": \"3214657890RootSAPSSE\"," +
" \"children\": [{" +
" \"name\": \"672BENIAMEEN .Sales Base Market SectionCustomer Representative\"," +
" \"children\": [{" +
" \"name\": \"672BENIAMEEN .Sales Base Market SectionPeão\"," +
" \"children\": [{" +
" \"name\": \"910MAZHAR .Sales Base Market SectionCustomer Representative\"," +
" \"children\": [{" +
" \"name\": \"910MAZHAR .Sales Base Market SectionPeão\"," +
" \"children\": [{" +
" \"name\": \"713NOSHERWAN .Sales Sargodha SectionCustomer Representative\"," +
" \"children\": [{" +
" \"name\": \"713NOSHERWAN .Sales Sargodha SectionPeão\"" +
" }," +
" {" +
" \"name\": \"1161SAQLAIN .Sales Toba Taik Singh SecPeão\"" +
" }]" +
" }]" +
" }]" +
" }]" +
" }," +
" {" +
" \"name\": \"1161SAQLAIN .Sales Toba Taik Singh SecCustomer Representative\"," +
" \"children\": [{" +
" \"name\": \"1179SHAMOON .Administration SectionDriver ( R )\"" +
" }]" +
" }]" +
" }," +
" {" +
" \"name\": \"1179SHAMOON .Farooq Khan TrustDriver ( D)\"" +
" }]" +
"}]";
当我运行上面的代码时,它只显示在级别的孩子身上。但我想迭代整个对象列表。
有什么想法吗?请帮忙。
答案 0 :(得分:0)
使用递归来运行EmployeeJSONObj
public class Help {
public static void main(String args[]) {
String str = "[{" +
" \"name\": \"3214657890RootSAPSSE\"," +
" \"children\": [{" +
" \"name\": \"672BENIAMEEN .Sales Base Market SectionCustomer Representative\"," +
" \"children\": [{" +
" \"name\": \"672BENIAMEEN .Sales Base Market SectionPeão\"," +
" \"children\": [{" +
" \"name\": \"910MAZHAR .Sales Base Market SectionCustomer Representative\"," +
" \"children\": [{" +
" \"name\": \"910MAZHAR .Sales Base Market SectionPeão\"," +
" \"children\": [{" +
" \"name\": \"713NOSHERWAN .Sales Sargodha SectionCustomer Representative\"," +
" \"children\": [{" +
" \"name\": \"713NOSHERWAN .Sales Sargodha SectionPeão\"" +
" }," +
" {" +
" \"name\": \"1161SAQLAIN .Sales Toba Taik Singh SecPeão\"" +
" }]" +
" }]" +
" }]" +
" }]" +
" }," +
" {" +
" \"name\": \"1161SAQLAIN .Sales Toba Taik Singh SecCustomer Representative\"," +
" \"children\": [{" +
" \"name\": \"1179SHAMOON .Administration SectionDriver ( R )\"" +
" }]" +
" }]" +
" }," +
" {" +
" \"name\": \"1179SHAMOON .Farooq Khan TrustDriver ( D)\"" +
" }]" +
"}]";
System.out.println(str);
Gson gson = new Gson();
Type type = new TypeToken<List<Employees>>(){}.getType();
List<Employees >l = gson.fromJson(str, type);
System.out.println(l);
iterateOverEmployee(l);
}
private static void iterateOverEmployee(List<EmployeeJSONObj> l) {
for(EmployeeJSONObj emp: l){
if(emp.getChildren() != null){
for(int i=0;i<emp.getChildren().size();i++)
{
System.out.println("Name: "+emp.getChildren().get(i).getName()+"<br/>");
}
iterateOverEmployee(emp.getChildren());
}
}
}
<强> EmployeeJSONObj 强>
public static class EmployeeJSONObj {
private String name;
private List<EmployeeJSONObj> children;
public String getName()
{
return name;
}
public String toString() {
return "name: " + name + ", children = " + children;
}
public List<EmployeeJSONObj> getChildren() {
return children;
}
public void setChildren(List<EmployeeJSONObj> children) {
this.children = children;
}
}
输出:
Name: 672BENIAMEEN .Sales Base Market SectionCustomer Representative<br/>
Name: 1179SHAMOON .Farooq Khan TrustDriver ( D)<br/>
Name: 672BENIAMEEN .Sales Base Market SectionPeão<br/>
Name: 1161SAQLAIN .Sales Toba Taik Singh SecCustomer Representative<br/>
Name: 910MAZHAR .Sales Base Market SectionCustomer Representative<br/>
Name: 910MAZHAR .Sales Base Market SectionPeão<br/>
Name: 713NOSHERWAN .Sales Sargodha SectionCustomer Representative<br/>
Name: 713NOSHERWAN .Sales Sargodha SectionPeão<br/>
Name: 1161SAQLAIN .Sales Toba Taik Singh SecPeão<br/>
Name: 1179SHAMOON .Administration SectionDriver ( R )<br/>
作为旁注
使用Notepad ++或其他工具格式化您的Json字符串。通过这种方式,您可以避免一些错误