Java和JSON中的嵌套for循环有问题

时间:2018-10-19 08:08:46

标签: java arrays json servlets

我想要一个JSON输出,其中“ postCode”为“ parent”,其子级为“ statusName”和“ statusCount”。

JSONObject jsonObject = New JSONObject();
JSONArray jsonArray = New JSONArray();

for (StatisticsDTO object : lstDTO) {

    jsonObject.put("postCode",object.getPostalCode());
    log.info(object.getPostalCode());


    List <StatisticsDetailsDTO> listStat = object.getStatistics();  

    //log.info("listStat" : + listStat.size()); // Assuming that I have 2 postal codes.

    if (listStat != null) {

        for (int i = 0; i< listStat.size(); i++) {
            StatisticsDetailsDTO dtostat = listStat.get(i); 

            jsonObject.put("statusName",dtostat.getStatName());
            jsonObject.put("statusCount",dtostat.getStatCount());

            jsonArray.add(jsonObject);
            log.info(jsonArray.toString());
        }

    }

}

输出为:
12345
[{“ statusName”:“ Test1”,“ statusCount”:“ 1”}]
[{“ statusName”:“ Test2”,“ statusCount”:“ 2”},{“ statusName”:“ Test2”,“ statusCount”:“ 2”}]
[{“ statusName”:“ Test3”,“ statusCount”:“ 3”},{“ statusName”:“ Test3”,“ statusCount”:“ 3”,{“ statusName”:“ Test3”,“ statusCount“:” 3“}]
67890
[{“ statusName”:“ Test4”,“ statusCount”:“ 4”},{“ statusName”:“ Test4”,“ statusCount”:“ 4”},{“ statusName”:“ Test4”, “ statusCount”:“ 4”},{“ statusName”:“ Test4”,“ statusCount”:“ 4”}]
[{“ statusName”:“ Test5”,“ statusCount”:“ 5”},{“ statusName”:“ Test5”,“ statusCount”:“ 5”},{“ statusName”:“ Test5”, “ statusCount”:“ 5”},{“ statusName”:“ Test5”,“ statusCount”:“ 5”},{“ statusName”:“ Test5”,“ statusCount”:“ 5”}]
[{“ statusName”:“ Test6”,“ statusCount”:“ 6”},{“ statusName”:“ Test6”,“ statusCount”:“ 6”,{“ statusName”:“ Test6”,“ statusCount“:” 6“},{” statusName“:” Test6“,” statusCount“:” 6“},{” statusName“:” Test6“,” statusCount“:” 6“},{” statusName“:” Test6“,” statusCount“:” 6“},{” statusName“:” Test6“,” statusCount“:” 6“}]

结果应该类似于以下内容,但格式为JSON。我注意到该值重复出现。

邮政编码:12345

  • 状态名称:Test1状态计数:1
  • 状态名称:Test2状态计数:2
  • 状态名称:Test3状态计数:3

邮政编码:67890

  • 状态名称:Test4状态计数:4
  • 状态名称:Test5状态计数:5
  • 状态名称:Test6状态计数:6

1 个答案:

答案 0 :(得分:0)

您应该在每次迭代中创建jsonObject,以避免重复值。

检查此代码:

JSONArray jsonArray = New JSONArray();

for (StatisticsDTO object : lstDTO) {

    JSONObject jsonObject = New JSONObject(); //Move it here
    jsonObject.put("postCode",object.getPostalCode());
    log.info(object.getPostalCode());


    List <StatisticsDetailsDTO> listStat = object.getStatistics();  

    //log.info("listStat" : + listStat.size()); // Assuming that I have 2 postal codes.
    JSONArray tempJsonArray = New JSONArray();
    if (listStat != null) {

        for (int i = 0; i< listStat.size(); i++) {
            StatisticsDetailsDTO dtostat = listStat.get(i); 

            jsonObject.put("statusName",dtostat.getStatName());
            jsonObject.put("statusCount",dtostat.getStatCount());

            jsonArray.add(jsonObject);
            tempJsonArray.add(jsonObject);
        }   
    }    
    log.info(tmepJsonArray.toString());
   }