如何遍历保存到JSONObject的数据数组并将其放入JSONArray?

问题描述 投票:0回答:1

我的HTML中有字段,例如说我在控制器上循环了两行字段。

我希望它得到这样的结果:

{
"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"
   }
  ]
}

我无法找到仅获得最后一行的原因。任何帮助表示赞赏。谢谢。

java arrays json spring-boot object
1个回答
0
投票

您应该在第一个“ for循环”中创建数组列表和JSONObject。因为您总是更改相同的对象,您可以尝试吗?

        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);
© www.soinside.com 2019 - 2024. All rights reserved.