[이클립스/Eclipse] org.json.simple.JSONArray cannot be cast to org.json.simple.JSONObject 문제 해결 방법은 Restful API를 호출하여 가져오는 데이터의 형태에 따라 Casting을 어떻게 하냐에 따라 다르다. 진짜.. 이것 때문에 삽질 오지게 했다. 이 문제에서는 org.json 패키지냐 org.json.simple 패키지냐를 잘 봐야 한다.
해결방법
내가 이 문제를 겪었던 원인은 패키지에서 org.json.simple이냐 org.json이냐에 따라 문제가 발생했다.
List<org.json.simple.JSONObject> res = new ArrayList<>();
res = restApiService.getLabel(map); // List<JSONObject>형으로 리턴
org.json.simple.JSONObject sRow = res.get(j);
Restful API를 호출하여 결과를 받은 데이터는 String형으로 왔다.
String listData = postRequest.excutePost(systemConfig.getUrl() + "/api/label/list.rest", jsonString);
이 String형의 데이터는 {"data" : [{"ID" : "1"}, {"ID" : "1"}, {"ID" : "1"}] 이런 식으로 감싸져 있었다.
그래서, 아래와 같이 String형의 JSon Data를 파싱했다.
Object obj = null;
JSONObject jsonObj = null;
JSONParser jsonParser = new JSONParser();
obj = jsonParser.parse(str);
jsonObj = (JSONObject) obj;
String형의 데이터를 JSONParser를 통해 Object로 바꾸고, 이 Object를 다시 JSONObject로 캐스팅을 합니다.
그런 다음에, data로 Key를 가지는 Value를 꺼내야 하므로, 아래와 같이 Value를 추출합니다.
Object jo = jsonRt.get("data");
그러면, [{"ID" : "1", "NAME" : "TEST"}, {"ID" : "2", "NAME" : "TEST"}, {"ID" : "3", "NAME" : "TEST"}] 이렇게 생긴 데이터가 JSONArray 형태로 감싸져 있기 때문에, Object를 JSONArray 형태로 바꾼 다음에, 안에 들어 있는 Object 데이터를 JSONObject로 캐스팅하여 꺼내줍니다.
JSONArray temp = (JSONArray) jo;
for(int i = 0; i < temp.size(); i++) {
JSONObject jsonObj = (JSONObject) temp.get(i);
res.add(jsonObj);
}
마지막으로, org.json.simple 패키지냐 org.json 패키지냐에 따라서 Casting을 아래와 같이 설정하면 됩니다.
org.json.simple.JSONObject sRow = res.get(j);
'IT > 이클립스(Eclipse)' 카테고리의 다른 글
[이클립스/Eclipse] 이클립스(Eclipse) 빨간형광줄, 초록형광줄 지우는 방법 (0) | 2022.04.04 |
---|---|
[이클립스/Eclipse] 이클립스(Eclipse) 라인 넘버 이동하는 방법 (0) | 2022.04.04 |
[이클립스/Eclipse] 이클립스 log4j2.xml 설정 방법 (0) | 2022.03.27 |
[이클립스/Eclipse] 이클립스에서 GIT 충돌 해결하는 가장 간단한 방법 (0) | 2022.03.24 |
[이클립스/Eclipse] 이클립스 페이지 전환 및 다음 페이지로 이동하는 단축키 설정 방법 (0) | 2022.03.23 |
[이클립스/Eclipse] editor does not contain a main type 문제 해결 방법 (0) | 2022.03.22 |
이클립스 An internal error occurred while showing an internal error. 문제 해결 방법 (4) | 2022.03.21 |
[이클립스/Eclipse] 이클립스 Getter/Setter 단축키 (0) | 2022.03.21 |
최근댓글