Как l oop по массиву данных, сохраненных в JSONObject, и поместить его в JSONArray? - PullRequest
0 голосов
/ 29 мая 2020

У меня есть поля в моем HTML, скажем, например, 2 строки полей, которые я oop накладываю на свой контроллер.

Я хочу, чтобы результат был примерно таким:

{
"specifications":
[
    {
      "name" : "height",
      "value" : "cm"
    },
    {
      "name" : "weight",
      "value" : "kg"
    }
  ]
}

Но каждый раз, когда я использую свой код ниже, я получаю только последнюю строку итерации, сохраненную в моем массиве JSONArray

JSONObject itemTypeObj = new JSONObject();
JSONArray itemTypeArray = new JSONArray();
JSONObject itemTypeSpecs = new JSONObject();
ArrayList<String> values = new ArrayList();

        for(int x = 0; x < specName.length; x++){

            itemTypeSpecs.put("specName", specName[x]);

            if (specValue[x].contains(",")) {

                for (String v : specValue[x].split(",")) {
                    values.add(v.trim());
                }

                itemTypeSpecs.put("specValue", values);
            } else {
                itemTypeSpecs.put("specValue", specValue[x]);
            }

            values.clear();

            itemTypeArray.put(itemTypeSpecs);

        }

itemTypeObj.put("specifications", itemTypeArray);

Результат становится таким, вместо того, который я ожидал сверху

{"specifications":
  [
   {
    "name":"Weight",
    "value":"kg"
   },
   {
    "name":"Weight",
    "value":"kg"
   }
  ]
}

Я не могу найти причину, по которой он получает только последнюю строку. Любая помощь приветствуется. Спасибо.

1 Ответ

3 голосов
/ 29 мая 2020

Вы должны сначала создать список массивов и JSONObject внутри «for l oop». Поскольку вы всегда меняете одни и те же объекты. Можете ли вы попробовать это?

        JSONObject itemTypeObj = new JSONObject();
        JSONArray itemTypeArray = new JSONArray();

        for (int x = 0; x < specName.length; x++) {
            List<String> values = new ArrayList();
            JSONObject itemTypeSpecs = new JSONObject();
            itemTypeSpecs.put("specName", specName[x]);

            if (specValue[x].contains(",")) {
                for (String v : specValue[x].split(","))
                    values.add(v.trim());
                itemTypeSpecs.put("specValue", values);
            } else {
                itemTypeSpecs.put("specValue", specValue[x]);
            }
            itemTypeArray.put(itemTypeSpecs);
        }
        itemTypeObj.put("specifications", itemTypeArray);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...