프로그램 언어는 다양하게 있다. 이 언어들을 통용하기 위한 공용어가 존재하는데, 이를 Json(중간 데이터)라고 한다.
Json은 JavaScript Object Notation의 약자로 자바스크립트와 유사한 언어이다.
Json으로 변환하는 프로그램 중 가장 많이 사용하는 Gson 라이브러리를 먼저 설치하자.
https://mvnrepository.com/artifact/com.google.code.gson/gson
넣을 데이터는 다음과 같다.
{
"이름": "홍길동",
"나이": 25,
"성별": "여",
"주소": "서울특별시 양천구 목동",
"특기": ["농구", "도술"],
"가족관계": {"#": 2, "아버지": "홍판서", "어머니": "춘섬"},
"회사": "경기 수원시 팔달구 우만동"
}
이를 자바 클래스로 만들어보자.
class Family{
int 샵 = 2;
String 아버지 = "홍판서";
String 어머니 = "춘섬";
}
class Person{
String 이름 = "홍길동";
int 나이 = 25;
String 성별 = "여";
String 주소 = "서울특별시 양천구 목동";
String[]특기= {"농구","도술"};
Family 가족관계 = new Family();
String 회사 = "경기 수원시 팔달구 우만동";
}
Json은 데이터형이 다음과 같다.
Number | 실수(정수) |
null | 빈 값 |
String | 문자열(json은 char이 없으니 주의하기) |
boolean | 논리값(참, 거짓) |
Array | 배열 |
Object | 객체(순서가 없는 이름:값)의 모임 |
(가족관계 같은 경우는 다양한 데이터형이 모여있는 객체형이므로, 클래스 자료형으로 다시 만들어준다.)
Gson이 제공하는 함수는 다음과 같다
fromJson() 함수 : Json 에서 java object로 변환하는 함수
toJson() 함수 : java object 에서 Json(string)으로 변환하는 함수
만들어진 클래스는 자바 오브젝트이므로 이를 이용하기 위해서 toJson으로 사용해보자.
public class JsonEx01 {
public static void main(String[] args) {
Gson gson=new Gson();
String personJson=gson.toJson(new Person());
System.out.println(personJson);
}
}
다음과 같이 Json의 배열처럼 도출된다.
Json으로 만들어진 배열을 깔끔하게 만들어주는 사이트가 있다.
다음과 같이 깔끔하게 정리해서 보여줄 수 있다.
그럼 Json으로 받은 데이터는 어떻게 java object로 변환할 수 있을까?
여기서 먼저 알아야 할 점은, Json 데이터는 JavaScript를 기반으로 하기 때문에, 데이터타입이 없지만, java의 경우 데이터타입이 존재한다는 점이다. 따라서, 데이터가 들어갈 변수와 데이터타입을 새로 지정한 클래스 원형을 만들어야한다.
class Person{
String 이름;
int 나이;
String 성별;
String 주소;
String[] 특기;
Family 가족관계;
String 회사;
}
class Family{
int 샵;
String 아버지;
String 어머니;
}
그 후, 데이터를 변환해보자.
public class GsonEx01 {
public static void main(String[] args) {
String jsonPerson = "{\"이름\":\"홍길동\",\"나이\":25,\"성별\":\"여\",\"주소\":\"서울특별시 양천구 목동\",\"특기\":[\"농구\",\"도술\"],\"가족관계\":{\"샵\":2,\"아버지\":\"홍판서\",\"어머니\":\"춘섬\"},\"회사\":\"경기 수원시 팔달구 우만동\"}";
Gson gson = new Gson();
Person p=gson.fromJson(jsonPerson, Person.class);
System.out.println(p.이름);
System.out.println(p.가족관계.아버지);
}
}
이 때, 알아야 할 점은 데이터 통신을 할 때 무조건 String 문자열로 받는다는 점이다. 따라서, Json 데이터를 받을 때 무조건 String 문자열로 받아야만 한다.
Json에서 Java로 변환하는 것이므로 FromJson 메서드를 이용한다.
이 때, 첫 매개변수는 내가 변환할 Json 데이터의 변수, 두번째 매개변수는 내가 넣을 클래스의 원형을 넣는다.
이렇게 데이터를 일일히 클래스 원형을 만드는 것이 어려울 때, 사용하는 사이트가 있다.
http://www.jsonschema2pojo.org/
이 사이트는 Json 데이터를 넣으면 자동으로 클래스와 getter, setter메서드를 만들어준다.
(주의할 점은, 클래스 명을 한국어로 만들 수 없다는 점이다.)
저 코드를 복사하여 다른 자바파일에 붙여넣은 후, 클래스를 호출하면 같은 방식으로 사용할 수 있다.
package gsontest;
import com.google.gson.Gson;
public class GsonEx03 {
public static void main(String[] args) {
String jsonData="{\"name\":\"코스\",\"age\":40}";
System.out.println(jsonData);
Gson gson=new Gson();
People people=gson.fromJson(jsonData, People.class);
System.out.println(people.getName());
System.out.println(people.getAge());
}
}
'JAVA' 카테고리의 다른 글
JAVA 실습 9. 공공데이터와 Json을 이용한 항공데이터 조회하기 (0) | 2020.04.07 |
---|---|
웹과 OSI 7계층 (0) | 2020.04.07 |
13. 입출력 (0) | 2020.04.06 |
13. 접근지정자 (0) | 2020.04.06 |
JAVA 실습 8. 객체 지향, 제네릭과 컬렉션을 이용한 커피숍 만들기. (0) | 2020.04.03 |