메뉴 건너뛰기

조회 수 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
번호 제목 날짜 조회 수
197 MediaPlayer 클래스 사용법 file 2018.10.02 1803
196 prepend(),append(),before(),after() 메서드 2014.10.20 7361
195 ScrollView의 활용 2015.07.16 6531
194 setContentView()와 레이아웃 전개자(LayoutInflater) 2021.03.31 267
193 TextureView를 이용한 카메라 Preview 좌우 반전 2015.06.10 14245
192 This Handler class should be static or leaks might occur 시 해결법 2020.12.14 241
191 URL을 이용해서 이미지 다운로드 하기 2015.07.16 7408
190 URL을 이용해서 이미지 다운로드 하기 (멀티 쓰레드 이용) file 2015.07.16 8992
189 ViewFlipper 사용하기 file 2015.07.16 9631
188 Virtual Device , 디자인 화면 file 2021.03.31 260
187 Volley 로 웹요청하고 응답받기1 - Get방식 file 2020.12.14 348
186 Volley 로 웹요청하고 응답받기2 - Post방식 , 로그인-회원가입 (php,mysql 연동) file 2020.12.14 1445
185 Volley 로 웹요청하고 응답받기3 - Get방식 , json 읽기 (php,mysql) file 2020.12.14 384
184 Volley 이용시에 한글 깨질때 UTF-8로 변경 2020.12.14 351
183 WebView 작업할때 Net::ERR_UNKNOWN_URL_SCHEME 에러 발생할때 (전화걸기,문자보내기 안된다) 2020.12.14 1079
182 WebView 줌 컨트롤러 가리기 2014.08.28 6317
181 WebView를 사용할때 HttpClient를 이용한 Session 유지 2018.12.27 4390
180 WebView에서 카메라 및 이미지 업로드 (선택적용가능) file 2020.12.14 2730
179 WIFI 신호세기 강도 측정하기 2014.08.28 11245
178 XmlPullParser 를이용하여 데이터 가져와보기!! 2014.08.28 7225
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 13 Next
/ 13

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved