我已经制作了这个JSON解析器,我希望获得所有不同地址的副本,但没有重复的地址(还有许多其他JSON对象也参与其中)。但是当我到达featuresArray.add(i, feature);
时,我一直收到错误回复。我在这里做错了什么?
private static void simpleJSON() throws IOException {
JSONParser parser = new JSONParser();
JSONArray featuresArray = new JSONArray();
String check = "check";
try {
Object obj = parser.parse(new FileReader(filepath));
JSONArray jsonarray = (JSONArray) obj;
for (int i = 0; i < jsonarray.size(); i++) {
JSONObject jsonobject = (JSONObject) jsonarray.get(i);
String location_name = (String) jsonobject.get("location_name");
String street_address = (String) jsonobject.get("street_address");
if (street_address.equals(check)) {
continue;
}
check = street_address;
Map feature = new LinkedHashMap();
feature.put("location_name", location_name);
feature.put("street_address", street_address);
featuresArray.add(i, feature);
}
} catch (ClassCastException c) {
c.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
答案 0 :(得分:0)
在你的情况下,
if (street_address.equals(check)) {
continue;
}
每当执行上述块时,continue
语句特别是控件跳转到
for (....; i++)
所以i
会增加
现在假设i = 1并且equals
条件变为真,则i
将增加
然后我变成2.现在假设equals
返回false然后执行此语句
featuresArray.add(i, feature);
所以,我是1,现在是2,所以在这种情况下它会跳过索引1
这可能会导致问题。
您可以像这样修改您的姓名:
if (street_address.equals(check)) {
i--;
continue;
}
来对抗索引的增量。