본문 바로가기
JAVA

14. Json

by 김마리님 2020. 4. 6.

프로그램 언어는 다양하게 있다. 이 언어들을 통용하기 위한 공용어가 존재하는데, 이를 Json(중간 데이터)라고 한다. 

Json은 JavaScript Object Notation의 약자로 자바스크립트와 유사한 언어이다.

Json으로 변환하는 프로그램 중 가장 많이 사용하는 Gson 라이브러리를 먼저 설치하자.

https://mvnrepository.com/artifact/com.google.code.gson/gson

 

Maven Repository: com.google.code.gson » gson

 

mvnrepository.com

넣을 데이터는 다음과 같다.

 {
    "이름": "홍길동",
    "나이": 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으로 만들어진 배열을 깔끔하게 만들어주는 사이트가 있다.

http://json.parser.online.fr/

 

Json Parser Online

 

json.parser.online.fr

다음과 같이 깔끔하게 정리해서 보여줄 수 있다.

 

그럼 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());
	}
}

반응형