Возникли проблемы с вложенным циклом в Java и JSON - PullRequest
0 голосов
/ 19 октября 2018

Я хотел бы иметь вывод JSON, имеющий "postCode" в качестве "родителя", а его потомком будут "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", "СТОtusCount ":" 6 "}, {" statusName ":" test6" , "statusCount": "6"}, { "statusName": "test6", "statusCount": "6"}, { "statusName":»Test6 "," statusCount ":" 6 "}]

Результат должен быть примерно таким, как показано ниже, но в формате JSON.Я заметил, что значение повторяется.

Почтовый индекс: 12345

  • Имя статуса: Test1 Status Count: 1
  • Status Name: Test2 Status Count: 2
  • Имя статуса: Test3 Счетчик статуса: 3

Почтовый индекс: 67890

  • Имя статуса: Test4 Количество статусов: 4
  • СтатусИмя: Test5 Status Count: 5
  • Имя состояния: Test6 Status Count: 6

1 Ответ

0 голосов
/ 19 октября 2018

Вы должны создать 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());
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...