메뉴 건너뛰기

조회 수 851 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

1.  json 기본 개념

{ "Movies" : [
    {
        "title" : "미션임파서블",
        "grade" : "15세 관람가",
        "category" : "액션"
    },
    {
        "title" : "어벤져스",
        "grade" : "12세 관람가",
        "category" : "액션"
    },
    {
        "title" : "범죄도시",
        "grade" : "19세 관람가",
        "category" : "범죄/스릴러"
    },
    {
        "title" : "",
        "grade" : "",
        "category" : ""
    }
]
} 

▼ json은 위와같은 모습을 가집니다. Json은 name-value 형태의 쌍으로 이루어져 있으며 name과 value는 :으로 연결되어있습니다. name은 String이기 때문에 반드시 큰따옴표("")로 묶어줘야 하며 value는 String형 데이터일 때 큰 따옴표(")로 묶어주면 됩니다. 각 데이터 쌍들의 구분은 쉼표(,)를 사용하여 구분합니다.

"title" : "어벤져스"

▼ 위에서 언급한대로 Json은 name : value 쌍으로 이루어집니다. title이 name에 해당하면 큰 따옴표(")로 감싸 져 있으며 (:) 다음에 value 값이 옵니다. 이때 어벤저스라는 데이터는 String형이기 때문에 큰따옴표(")로 감싸져 있는 것입니다. 위에서는 value 타입이 String이지만 배열(Array)이나 객체(Object) 또는 정수형 같은 다른 타입이 들어갈 수 있습니다. 

{
    "students" : ["김철수", {"전공" : ["프로그래밍", "영어"]}]
}

▼ Json에서 객체(Object)의 시작은 {} 중괄호를 사용하고 배열은 [] 대괄호를 사용합니다. 위 Json 형태를 살펴보면 {} 안에 name:value 쌍으로 이루어진 데이터가 들어갑니다. (객체 {} 안에는 반드시 name:value 쌍이 들어갑니다. ) students와 쌍을 이루는 value는 대괄호를 사용하여 배열이 들어갑니다. 배열의 각 요소는 쉼표(,)를 통해 구분되며 각 요소는 마찬가지로 객체가 오거나 배열 또는 일반적인 String과 같은 타입이 들어갈 수 있습니다. 

 

{ "Movies" : [

    {
        "title" : "미션임파서블",
        "grade" : "15세 관람가",
        "category" : "액션"
    },
    {
        "title" : "어벤져스",
        "grade" : "12세 관람가",
        "category" : "액션"
    },
    {
        "title" : "범죄도시",
        "grade" : "19세 관람가",
        "category" : "범죄/스릴러"
    },
    {
        "title" : "아저씨"
        "grade" : "19세 관람가"
        "category" : "범죄/스릴러"
    }
]
} 

▼ 이제 포스팅 초입에 나왔떤 위 Json 형태의 포맷이 눈에 익으실 겁니다. 가장 먼저 { 를 시작으로 하여 객체가 시작된다는 것을 알려주고 Movies와 쌍으로 value 타입은 배열이 들어갑니다. Movies의 value에 해당하는 배열은 총 4개의 요소를 가지며 각 요소는 {}로 이루어진 객체 타입의 데이터를 가지고 있습니다. 각 배열의 요소 {} 안에는 한 개의 영화 정보를 담기 위한 name:value 쌍으로 이루어진 객체로 이루어져 있습니다.


2. Json 파싱하기

 

 

▼ 영화 정보를 포함하는 Json 형태의 데이터 포맷을 파싱 하여 안드로이드 앱에서 List 형식으로 보여주는 예제를 살펴보겠습니다.


2.1 프로젝트에 Json 파일 추가하기

먼저 안드로이드 프로젝트에서 Json 파일을 추가하는 방법을 살펴보겠습니다. 

 

 

 

▼ Json 파일은 /app/assets/ 경로 아래에 위와 같이 추가합니다. 만약 assets 폴더가 없다면 app 폴더를 우클릭하여 [new] - [Folder] - [Assets Folder]를 클릭하여 폴더를 먼저 생성해줍니다. 폴더가 생성되면 assets 폴더를 우클릭하여 새로운 파일을 생성하고 확장자는. json으로 하여 생성해줍니다. 

 

 


2.2 Json 파일 읽어오기

    private String getJsonString()
    {
        String json = "";

        try {
            InputStream is = getAssets().open("Movies.json");
            int fileSize = is.available();

            byte[] buffer = new byte[fileSize];
            is.read(buffer);
            is.close();

            json = new String(buffer, "UTF-8");
        }
        catch (IOException ex)
        {
            ex.printStackTrace();
        }

        return json;
    }

▼ Json 파일을 읽어와 파일 내용을 String 변수에 담아 return 하는 getJsonString() 함수입니다. 


2.3 Json 파싱 하기

public class Movie{
    private String title;
    private String Category;
    private String grade;

    public String getTitle() {
        return title;
    }

    public String getCategory() {
        return Category;
    }

    public String getGrade() {
        return grade;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public void setCategory(String category) {
        Category = category;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }

}

▼ Json으로부터 파싱 된 영화 데이터를 담기 위한 클래스입니다. getter/setter 함수를 구현하여 외부에서 각 멤버 변수에 접근 가능하도록 구현합니다.

    private void jsonParsing(String json)
    {
        try{
            JSONObject jsonObject = new JSONObject(json);

            JSONArray movieArray = jsonObject.getJSONArray("Movies");

            for(int i=0; i<movieArray.length(); i++)
            {
                JSONObject movieObject = movieArray.getJSONObject(i);

                Movie movie = new Movie();

                movie.setTitle(movieObject.getString("title"));
                movie.setGrade(movieObject.getString("grade"));
                movie.setCategory(movieObject.getString("category"));

                movieList.add(movie);
            }
        }catch (JSONException e) {
            e.printStackTrace();
        }
    }

 

 

 

 

▼ JsonObject를 먼저 생성합니다. 인자 정보는 Json 포맷의 String형 변수를 넘겨줍니다. 우리는 Movies의 value에 해당하는 배열에 대한 정보가 필요하기 때문에 getJSONArray() 함수를 호출하여 JSONArray 객체를 생성합니다. 그런 다음 JSONArray를 순회하며 각 영화 정보를 가져올 건데 getJSONObject() 함수를 통해 영화 정보에 해당하는 객체를 movieObject 객체가 참조하도록 합니다. key 값을 가져오기 위해서는 getString() 함수를 호출하여 인자 정보로 가져오고자 하는 값에 해당하는 key값을 넘겨주게 됩니다.  

 


List of Articles
번호 제목 날짜 조회 수
77 하이브리드앱 기본 - WebView로 웹페이지 띄우기 file 2020.12.14 1025
76 안드로이드 - 플로팅 액션 버튼(Floating Action Button) 사용법 file 2021.04.02 969
75 안드로이드 - RecyclerView의 ViewType 구분하기 file 2021.04.02 931
74 안드로이드 - 문자열 리소스(Resource) 추가 및 참조하기 file 2021.03.31 906
73 ListView 리스트뷰 연습3 - 커스텀 리스트뷰 (Custom ListView) file 2020.12.14 906
» 안드로이드 - Json 파싱하기 file 2021.04.02 851
71 안드로이드 - RatingBar를 통해 별점주기 file 2021.04.02 848
70 안드로이드 - 문자열 배열 리소스 추가하기 <string-array> file 2021.03.31 811
69 Firebase - 푸시알림 보내기 (2) 2021.09.30 768
68 안드로이드에서 url 주소로 이미지 바로 불러오기 (Glide 사용) 2020.12.14 759
67 안드로이드 - 리사이클러뷰 (RecyclerView) notifyDataSetChanged 실행 시 깜빡 거리는 현상 2021.04.02 748
66 안드로이드 - AlertDialog 사용하여 알림창 띄우는 방법 총정리 file 2021.03.31 689
65 안드로이드 - 갤러리에서 이미지 가져오기 2021.04.02 666
64 [Android] 퍼미션 권한체크(테드퍼미션) 2021.09.14 616
63 안드로이드 스튜디오 - 싱글톤 패턴 (SingleTon Pattenr) 클래스 자동 생성 file 2021.03.29 614
62 안드로이드 스튜디오 actionbar(액션바) 사라짐 file 2020.12.14 608
61 안드로이드 스튜디오 - getter/setter 메소드 자동생성 file 2021.03.29 583
60 안드로이드 - Text 입력 이벤트 처리 - TextWatcher file 2021.04.02 557
59 안드로이드 - 색상 리소스 (Color Resource) 추가 </color> file 2021.03.31 551
58 안드로이드 - 프레임레이아웃 (FrameLayout) file 2021.03.29 517
Board Pagination Prev 1 ... 4 5 6 7 8 9 10 11 12 13 Next
/ 13

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved