728x90
반응형
제가 Java에서 JsonArray를 사용하여 한 줄씩 가져오는 데이터를 하나로 묶기위해 dataAll()함수를 사용하다 위의 에러를 경험하게 되었습니다.
JsonArray jsonArray = Utilfunc.getJsonString(onlineData, "data");
JsonArray data = new JsonArray();
for (JsonElement je : msg.getAsJsonObject().get("data").getAsJsonArray()) {
JsonObject jo = new JsonObject();
jo.addProperty("symbol", je.getAsJsonObject().get("symbol").getAsString());
jo.addProperty("close_price", je.getAsJsonObject().get("price").getAsBigDecimal());
jo.addProperty("unix_time", je.getAsJsonObject().get("unix_time").getAsLong());
data.add(jo);
}
ja.addAll(data);
위와 같은 반복문을 돌리는 중, 처음 한 번은 잘 돌다가 두 번재 부터 ConcurrentModificationException에러가 뜨기 시작했습니다.
해당 에러가 뜨는 이유가 몇 가지 있는데
- addAll()하는 변수의 속성이 다른 경우.
- addAll()하는 변수의 데이터 포맷이 다른경우.
- List 데이터 삭제 시 List의 크기와 처리해야할 항목을 가리키는 인덱스가 불일치 하는 경우.
였습니다.
저는 데이터를 추가하는 3번째 항목은 아니였기 때문에 첫 번째나 두 번째 항목에 속했는데 .getClass()를 사용하여 서로 속성이
다른 것을 넣고 있는지 확인해보니 같은 것을 넣고 있어 데이터를 확인해보니
data:[{a:a, b:b, c:c, d:d}, {a:a, b:b, c:c}]
형태로 들어가더군요. 그렇습니다 첫번째 데이터와 포맷이 맞지 않았던 것이죠.
그래서 클래스에 JsonObject 하나 추가해서 데이터를 쌓아주었습니다.
public class NewMarketInfo {
static JsonArray stackData = new JsonArray();
...
public static void insertData(arg a, arg b,) throws Exception {
JsonArray ja = new JsonArray();
JsonArray data = new JsonArray();
for (JsonElement je : ja) {
JsonObject jo = new JsonObject();
jo.addProperty("symbol", je.getAsJsonObject().get("symbol").getAsString());
jo.addProperty("unix_time", je.getAsJsonObject().get("unix_time").getAsLong());
jo.addProperty("close_price", je.getAsJsonObject().get("price").getAsBigDecimal());
data.add(jo);
}
maps.addAll(data);
}
}
728x90
반응형
'프로그래밍(Web) > 업무관련' 카테고리의 다른 글
[바미] Java Milliseconds to Seconds 에피소드. (0) | 2022.12.16 |
---|---|
[바미] Java 스케줄러 삽질기. (0) | 2022.12.15 |
[바미] TypeORM 타임존 이슈 (0) | 2022.11.03 |
[바미] Ajax data 주의 사항. (0) | 2022.05.18 |
[바미] Header 관련한 삽질기 (0) | 2022.04.27 |