[ Error ] JSONArray와 JSONObject 에러 (해결)

ma.caron_g·2022년 9월 25일
0

Error 모음

목록 보기
1/1
post-thumbnail

< 게시글을 이해하기 위해 앞서 익혀놔야할 개념 >

아이들에게 설명하듯이 너무 잘 설명하셔서 링크 걸어두었습니다. 😀

[ 개요 ]

📄 .Json 파일에 존재하는 데이터를 파싱하기 위해 데이터를 가져오는데 JSONArrayJSONObject에 대한 오류가 발생.

[ 🤔 추측 ]

가져오는데 값에 대해 타입 형태의 오류가 난 것으로 추측해보는 중

[ 코드 ]

  • 개발툴 : IntelliJ IDEA
  • 사용 언어 : Java

📄 face_info.json 라는 파일을 가져오기 위한 코드를 작성

package com.company;

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class Main {

    public static void main(String[] args) throws IOException, ParseException {

		// 우선 가져올 파일의 경로를 작성
        String filePath = "[파일 경로]";

        // 파싱을 위한 파싱 객체 선언
        JSONParser parser = new JSONParser();

		// 파일을 읽어오기 위한 Reader 객체 선언.
        Reader reader = new FileReader(filePath);

		// JSONArray를 이용해서 파일을 가져오면 출력 가능 (성공)
        JSONArray jsonArray = (JSONArray) parser.parse(reader);
        jsonArray.add(reader);

		// 가져온 파일을 파싱해서 Object 형식으로 저장.
        JSONObject jsonObject = (JSONObject) parser.parse(reader);

		// 가져온 Object 객체에서 해당 Value값을 .get([DB 컬럼명])을 이용하여 가져옴
        int id = (int) jsonObject.get("id");
        int [컬럼값을 담을 변수명] = (int)jsonObject.get("[DB컬럼값]");

        System.out.println(id);
        System.out.println([컬럼값]);
    }
}
Exception in thread "main" java.lang. ClassCastException: class org.json.simple.JSONArray cannot be cast to class org.json.simple.JSONObject (org.json.simple.JSONArray and org.json.simple.JSONObject are in unnamed module of loader 'app')

[ 진행 ]

[ 의문 ]

  1. JSONObject를 선언하여.put()으로 Map값을 직접 넣어 JSONObject.get()을 이용할 때 값이 나옴.
  2. JSONObject를 선언하여 Reader한 파일을 Parser할 때 문제가 나타남.
  3. parser값을 JSONObject가 아닌 일반 Object객체에 넣었을 때는 오류없이 출력 됨.
  4. JSONArray로는 출력 가능
    -> JSONObject📄.json 파일을 읽을 때 에러가 발생하는데, 갖고 있는 📄.json 파일이 잘못된건가..?

[ Object를 이용한 파싱 ]

String filePath = "[파일 경로]";

        Reader reader = new FileReader(filePath);

        JSONParser parser = new JSONParser();
        Object obj = parser.parse(reader);

        System.out.println(obj);

[ 해결 ]

JSONArray로 파일을 JSONParser로 읽어 파싱하고

JSONObject.get(i)를 이용하여 getInt(), getString()으로 하나씩 키-값을 읽어옴.
JSONObject로 파싱해서 오류가 났던 것.
JSONObejct에서 JSONArray.get(index)를 통해 배열 객체를 하나씩 가져오면 해결.

profile
다른 사람이 만든 것을 소비하는 활동보다, 내가 생산적인 활동을 하는 시간이 더 많도록 생활화 하자.

0개의 댓글