1 minute read

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()으로 출력하면 일자 배치가 아닌 좀더 깔끔한 배치로 출력된다.
괄호안의 숫자는 들여쓰기의 정도를 나타낸다.

Tags:

Categories:

Updated:

Leave a comment