티스토리 뷰
JSON 데이터가 다른 객체나 배열을 가지고 있지 않은 단순한 데이터라면 Android에서 클래스로 정의하는 것은 간단하다.
데이터 속성을 바로 클래스 속성으로 매핑시키면 되니까!
그런데 배열이나 객체를 품고 있다면?
예를 들어 다음과 같은 JSON 데이터는 어떻게 클래스로 변환해야 할까?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | { "_id": "582...ba2", "title": "텀블러", "price": 35000, "url": "http://blog.imcreator.com", "provider": "582...b95", "__v": 0, "ship": { "text": "2500원 (5만원 이상 무료배송)", "price": 2500 }, "option": [ "흰색", "분홍색" ] } | cs |
"ship" 속성은 객체이고, option은 배열이다.
물론 이걸 직접 매핑을 시킬 수도 있겠지만 JSON 데이터를 JAVA 클래스로 변환해주는 사이트가 있다.
POJO란 'Plain Old Java Object'의 약자이다.
extends, implements, 또는 annotation을 사용하지 않은 순수한 객체
http://www.jsonschema2pojo.org/
Retrofit에서 GSON을 사용하면 Gson Annotation style를 추가할 수 있고,
아래 옵션 선택에 따라서 빌더 메서드, 게터/세터, 생성자 등 자동으로 생성시켜준다.
결과는 아래 Preview 버튼을 눌러서 확인할 수 있고, 위의 옵션에서 Preview를 눌렀을 때 아래와 같이
Example 클래스와 Ship 클래스를 확인 및 복사할 수 있다.
(코드가 너무 길어져 생성된 게터/세터 메서드는 삭제했다)
-----------------------------------com.example.Example.java-----------------------------------
package com.example;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Generated;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
("org.jsonschema2pojo")
public class Example {
("_id")
private String id;
("title")
private String title;
("price")
private Integer price;
("url")
private String url;
("provider")
private String provider;
("__v")
private Integer v;
("ship")
private Ship ship;
("option")
private List<String> option = new ArrayList<String>();
-----------------------------------com.example.Ship.java-----------------------------------
package com.example;
import javax.annotation.Generated;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
("org.jsonschema2pojo")
public class Ship {
("text")
private String text;
("price")
private Integer price;
참고문헌
jsonschema2pojo, http://www.jsonschema2pojo.org/
Using Retrofit to access JSON arrays, http://stackoverflow.com/questions/21815008/using-retrofit-to-access-json-arrays
'거인의 어깨위에 서려는 > 앱 개발자를 위한' 카테고리의 다른 글
[안드로이드] Facebook 인증, 릴리즈 버전을 위한 키해시 등록방법 (0) | 2017.02.04 |
---|---|
[안드로이드] 스플래시 스크린 제대로 만드는 방법 (1) | 2017.01.21 |
[REST API 요청] Retrofit 2.1.0 사용기 (0) | 2016.11.19 |
[앱 배포] MAC에서 zipalign 설정하기 (0) | 2016.09.23 |
[Android] Mac에서 adb 환경설정하기 (0) | 2016.06.16 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 아키텍처
- retrofit
- git 실수
- gradle
- 소름돋는필력
- 쉽게 말하는법
- node.js
- 시간 관리
- 스크럼
- 최은영작가님
- 안드로이드
- 이미지 여백주기
- multiDex issue
- Android
- iterms
- 구독료 계산기
- release build issue
- MVP
- 창의성을 지휘하라
- 좋은 습관이란
- 공존이 필요해요
- 소프트웨어 공학
- git ssh 연동
- 그리고 상상력
- egghead
- React Native
- go
- 이미지 일괄 변경
- 애드 캣멀
- patch-packages
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함