我的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"
}
]
}
我无法找到仅获得最后一行的原因。任何帮助表示赞赏。谢谢。
您应该在第一个“ 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);