JSON
JSON
JSON이란 플랫폼이나 언어와 무관하게 자료 교환을 목적으로 만들어진 형식이다.
책 정보를 저장하려고 할때
{"제목":"자바", "가격":12000, "쪽수":720}
와 같은 형식으로 사용할 수 있다.
name(key):value가 한 쌍 이다.
대괄호로 여러개를 묶어서 사용할 수 도 있다.
[{"제목":"자바", "가격":12000, "쪽수":720}, {"제목":"파이썬", "가격":15000, "쪽수":920}]
Gson
Gson을 사용해 객체를 JSON형식으로 변환할 수 있고 반대로 되돌릴 수 도 있다.
Object를 JSON으로 변환
String title;
int price;
String company;
int page;
이러한 내용의 BookDTO클래스를 JSON형식으로 바꾸어 보자.
BookDTO dto = new BookDTO("자바", 12000, "한빛", 720);
Gson g = new Gson();
우선 BookDTO와 Gson객체를 생성해준다.
String json = g.toJson(dto);
.toJson()
을 사용해 JSON으로 변환할 수 있다.
JSON을 Object로 변환
g.fromJson(json, BookDTO.class);
.fromJson()
을 사용해 Object로 변환할 수 있다.
앞에는 JSON타입을 뒤에는 변환될 타입을 작성한다. class까지 작성해줘야 한다.
List를 JSON으로 변환
List<BookDTO> lst = new ArrayList<BookDTO>();
lst.add(new BookDTO("자바1", 12000, "한빛1", 720));
lst.add(new BookDTO("자바2", 11000, "한빛2", 620));
위의 리스트를 JSON으로 바꾸어 보자.
String lstJson = g.toJson(lst);
마찬가지로 .toJson()
을 사용해 변환해 줄 수 있다.
JSON을 List로 변환
반대로 돌릴때는 아까와는 방법이 조금 다르다.
List<BookDTO> lst1 = g.fromJson(lstJson, List<BookDTO>.class);
이렇게 하면 될것 같지만, 앞의 JSON형식의 lstJson을 변환할 타입이 List와 BookDTO 이렇게 두개가 있기 때문에 에러가 나게된다.
List<BookDTO> lst1 = g.fromJson(lstJson, new TypeToken<List<BookDTO>>() {}.getType());
TypeToken()에 <>버켓을 주고 객체를 생성한 후 {}로 구현하고 getType()메소드로 타입정보를 가져올 수 있다.
JSON-Java
Gson에서는 클래스를 만들어 불러와 사용했지만 org.json에서는 생성없이 바로 사용할 수가 있다.
JSONArray student = new JSONObject();
우선 객체를 생성해준다.
student.put("name", "홍길동");
student.put("phone", "010-1111-1111");
student.put("address", "서울");
.put
을 사용해 값을 넣으면 된다.
여러개를 묶으려면 아래와 같이 하면된다.
JSONArray students = new JSONArray();
students.put(student);
배열에 student를 담아 준다.
student = new JSONObject();
student.put("name", "철수");
student.put("phone", "010-2222-2222");
student.put("address", "부산");
students.put(student);
또 다른 정보를 만들어 담아 준다.
출력을 하게되면 [{“address”:”서울”,”phone”:”010-1111-1111”,”name”:”홍길동”},{“address”:”부산”,”phone”:”010-2222-2222”,”name”:”철수”}] 와 같이 된것을 볼 수 있다.
이 배열을 마지막에 JSONObject로 만들어 마무리 할 수 있다.
JSONObject object = new JSONObject();
object.put("students", students);
이렇게 하면 배열전체를 value로 “students”를 name(key)로 가지는 JSONObject가 된다.
출력해보면 {“students”:[{…}, {…}]} 이런식으로 나올 것이다.
System.out.println(object.toString(i));
.toString()
으로 출력하면 일자 배치가 아닌 좀더 깔끔한 배치로 출력된다.
괄호안의 숫자는 들여쓰기의 정도를 나타낸다.
Leave a comment