자바를 이용해 데이터를 주고 받을 때 직렬화(Serialize) 포맷으로 JSON이나 XML 같은 텍스트 포맷을 사용하는 경우가 많다. 특히 REST API를 통해 데이터를 제공하는 경우 json이나 xml 포맷을 표준으로 삼는 경우가 많다. 텍스트를 사용하는 만큼 데이터를 처리하는데 상당히 높은 수준의 유연성을 제공하기 때문이다.
다만 텍스트로 표현되어있는 데이터에서 원하는 데이터를 뽑아오기 위해서는 문서를 파싱해야한다. 이번 포스트에서는 JSON 문서를 파싱하기 위해 GSON 이라는 라이브러리를 사용하도록 하겠다.
GSON
GSON은 구글에서 만든 자바 오브젝트의 직렬화/역직렬화 라이브러리다. GSON은 내부적으로 리플렉션(Reflection)을 사용하고 있어 사용자가 귀찮게 이런저런 옵션을 넣어주지 않아도 편하게 json 데이터를 다룰수 있게 해준다.
GSON 사용 - maven
메이븐 프로젝트에서 gson 라이브러리를 사용하기 위해서는 다음 의존성을 pom.xml 파일에 추가하면 된다.
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.0</version>
</dependency>
GSON 사용법 - json 문서 생성
우선 자바 객체를 이용해서 json 문서를 생성해보자. 다음과 같은 Employee 객체가 있다고 생각해보자.
public class Employee {
private String name;
private String department;
private int employeeNumber;
}
Employee 객체의 name, department, employeeNumber 값을 json 문서로 표현해보자. Employee 객체를 만들고 JSON 문자열로 만들어주는 메소드는 다음과 같이 작성할 수 있다.
import com.google.gson.Gson;
public void getJSONFromObject() {
Employee employee = new Employee();
employee.setName(“Dave”);
employee.setDepartment(“HR”);
employee.setEmployeeNumber(123);
Gson gson = new Gson();
String json = gson.toJson(employee);
System.out.println(json);
}
이 코드를 실행하면 다음 결과를 얻을 수 있다.
{“name”:”Dave”, “department”:”HR”, “employeeNumber”:123}
gson 객체를 생성하고, toJson() 메소드에 자바 객체를 넣어주면 json 문서를 생성해서 문자열 타입으로 돌려준다.
GSON 사용법 - json 문서 파싱
이번엔 반대로 json 텍스트를 파싱해서 자바 객체를 생성해보자. json 텍스트를 파싱하기 위해서는 gson의 JsonParser 클래스를 이용하면된다.
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
public void parseJSON() {
String json = "{\"name\":\"Dave\",\"department\":\"HR\",\"employeeNumber\":123}";
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(json);
String name = element.getAsJsonObject().get("name").getAsString();
String department = element.getAsJsonObject().get("department").getAsString();
String number = element.getAsJsonObject().get("department").getAsString();
System.out.println("name=" + name);
System.out.println("department=" + department);
System.out.println("number=" + number);
}
이 코드를 실행하면 다음 결과를 얻게 된다.
name=Dave
department=HR
number=123
JsonParser 객체를 생성하고 parse() 메소드를 이용해서 json 텍스트를 입력받으면 JsonElement 객체를 얻을 수 있다. 이 객체에서 getAsJsonObject() 메소드를 통해 JsonObject 객체를 얻어오고, get() 메소드를 이용해서 상세 프로퍼티의 값들을 읽어올 수 있다.
GSON 사용법 - json을 자바 객체 만들기
json 문서를 읽어서 자바 객체로 만들어 볼 수도 있다.
import com.google.gson.Gson;
public void getObjectFromJSon() {
String json = "{\"name\":\"Dave\",\"department\":\"HR\",\"employeeNumber\":123}";
Gson gson = new Gson();
Employee employee = gson.fromJson(json, Employee.class);
System.out.println("name=" + employee.getName());
System.out.println("department=" + employee.getDepartment());
System.out.println("number=" + employee.getEmployeeNumber());
}
이 코드를 실행한 결과는 다음과 같다.
name=Dave
department=HR
number=123
gson 클래스의 fromJson() 메소드를 이용하면 json 문서를 파싱해서 어떤 객체로 만들어줄지 명시할 수 있다. 위 코드에서는 json 문서를 읽어서 Employee 객체로 만들어줬다.
GSON 사용법 - json 객체 직접 만들기
직접 JsonObject 객체를 이용해서 json 문서를 만들어 낼 수도 있다.
import com.google.gson.Gson;
import com.google.gson.JsonObject;
public void makeJSon() {
Gson gson = new Gson();
JsonObject obj = new JsonObject();
obj.addProperty("name", "Dave");
obj.addProperty("department", "HR");
obj.addProperty("employeeNumber", 123);
String json = gson.toJson(obj);
System.out.println(json);
}
이 코드를 실행하면 다음 결과를 얻게 된다.
{"name":"Dave","department":"HR","employeeNumber":123}
댓글