下面的代码块用于将值存储在JSONObject中,以便对其进行迭代并在前端呈现。
JSONObject dlCovs = jsonObject.getJSONObject("result").getJSONObject("cov_details");
Iterator x = dlCovs.keys();
while (x.hasNext()){
String key1 = (String) x.next();
String value1 = dlCovs.optString(key1);
dlCovs.put("covabbrv",key1);
dlCovs.put("dcIssuedt",value1);
dlCovs.put("vecatg",key1);
dlData.put("dlCovs", dlCovs);
}
/* dlCovs.put("covabbrv",cov);
dlCovs.put("issue_date",issue_date);*/
dlObj.put("status","valid");
dlData.put("dlCovs", dlCovs);
dlData.put("status","valid");在我获得java.util.concurrentModificationException的while循环中迭代数据时,当我试图调试它们时,它也会将值存储在dlData.put("dlCovs",dlCovs)中,但是一旦它第二次出现迭代,就会引发错误。我遵循JSON值
"cov_details": {
"MCWG": "NA",
"3WTR": "NA",
"PSV BUS": "NA",
"LMV": "NA",
"INVCRG": "NA"
},任何帮助都将是非常感谢的,谢谢提前输入代码
发布于 2017-01-03 12:54:50
您正在修改地图,同时迭代它的条目。你不能这么做。
将项目放入单独的地图中,然后将其添加到“主”地图中:
Map newEntries = new HashMap();
Iterator x = dlCovs.keys();
while (x.hasNext()){
String key1 = (String) x.next();
String value1 = dlCovs.optString(key1);
newEntries.put("covabbrv",key1);
// .. etc
}
dlCovs.putAll(newEntries);还有:don't use raw types.您应该声明x如下:
Iterator<String> x = dlCovs.keys();那你就不需要演员了
String key1 = x.next();同样:
Map<String, String> newEntries = new HashMap<>();发布于 2017-01-03 13:32:21
在使用迭代器迭代映射时,不能更改基础映射。它被称为失败快速迭代器,它直接从底层结构读取。Java维护一个名为mods的内部标志,它计算对映射进行的结构更改的数量。如果迭代器在迭代时发现mods要更改,则抛出并发修改异常。在Java中,并发散列映射通过实现故障安全迭代器来解决这个问题。主要是您不能在迭代时更改map的结构。
https://stackoverflow.com/questions/41443951
复制相似问题