본문 바로가기
Spring

[java] Jsonparser, Gson 사용법 및 예제

by devjh 2021. 3. 5.
반응형

이번 게시글에서는 Gson과 JsonParser를 정리해보겠습니다.

 

pom.xml에 gson의존성을 추가해줍니다.

 

<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
	<groupId>com.google.code.gson</groupId>
	<artifactId>gson</artifactId>
	<version>2.8.6</version>
</dependency>

 

1. json문자열을 객체에 할당하기

@Getter
@Setter
public class Member {
    private String name;
    private String age;
}

 

Member클래스를 만들어줍니다.

 

@Test
void test() {
    // {"name":"John", "age":"20"}
    String jsonData = "{\"name\":\"John\", \"age\":\"20\"}";
    Gson gson = new Gson();
    MemberDto member = gson.fromJson(jsonData, MemberDto.class);
}
    

 

Gson객체를 생성해준뒤 gson.fromJson 메서드를 호출하여 객체로 변환이 가능합니다.

 

2. 객체를 Json문자열로 바꿔주기

@Getter
@Setter
public class Member {
    private String name;
    private String age;
}

Member클래스는 동일하게 사용합니다.

 

@Test
void test() {
    Member member = Member.builder().name("James").age(20).build;
    Gson gson = new Gson();
    String jsonData = gson.toJson(member);
}

gson.toJson(객체) 를 통해서 json으로 변경이 가능합니다.

 

 

 

3. key : value 타입의 json 처리

"{"name":"John", "age":"20"}"

대부분의 json데이터교환은 문자열을 통해 이뤄지니 모든예시는 문자열을 기준으로 하겠습니다.

 

간단한 json문자열을 jsonData라는 문자열에 넣고 JsonParser를 사용해 데이터를 꺼내는 예제입니다.

@Test
void test() {
    // {"name":"John", "age":"20"}
    String jsonData = "{\"name\":\"John\", \"age\":\"20\"}";
    JsonParser jsonParser = new JsonParser();
    JsonElement jsonElement = jsonParser.parse(jsonData);
    JsonObject jsonObject = jsonElement.getAsJsonObject();
    String name = jsonObject.get("name").getAsString();
    System.out.println("name = " + name);
}

 

1. JsonParser.parse를 이용하여 문자열을 JsonElement로 변환

2. 변환한 JsonElement를 JsonObject로 변경

3. jsonObject.get("key").getAsString() 을 이용하여 원하는 데이터 추출

 

JsonObject 객체에서 get메서드를 호출하여 원하는 value를 꺼낸다는걸 기억해줍니다.

 

숙달됐다면 한번에 꺼내줍니다.

String name = jsonParser.parse(jsonData).getAsJsonObject().get("name").getAsString();

 

4. value에 json배열이 들어간 경우

{"class":"1", "member": [{"name":"John", "age":"30"}, {"name":"Tom", "age":"29"}]}

Json배열을 처리하는 방법입니다.

 

@Test
void test() {
    //{"class":"1", "member":[{"name":"John", "age":"30"},{"name":"Tom", "age":"29"}]}
    String jsonData = "{\"class\":\"1\", \"member\":[{\"name\":\"John\", \"age\":\"30\"},{\"name\":\"Tom\", \"age\":\"29\"}]}";
    JsonParser jsonParser = new JsonParser();
    JsonElement jsonElement = jsonParser.parse(jsonData);
    JsonObject jsonObject = jsonElement.getAsJsonObject();
    JsonArray members = jsonObject.get("member").getAsJsonArray();
    
    for (JsonElement member : members) {
        JsonObject JsonObject = member.getAsJsonObject();
        String name = JsonObject.get("name").getAsString();
        System.out.println("name = " + name);
        
    }
}

 

jsonObject.get("member").getAsJsonArray() 제외하고는 1번예제와 동일합니다.

JsonObject.get("key")의 데이터가 JsonArray 일때 해당방법을 사용하여 JsonArray의 객체에 넣어준후

 

for문을 통해 꺼내주도록 합니다.

반응형

댓글