티스토리 뷰

CS/Java

JSON을 파싱하는 방법

기억용블로그 2022. 10. 21. 14:52
728x90

인풋 데이터가 json 포맷으로 주어지는 경우가 있다.

json 파싱 라이브러리로는 gson, json-simple, Jackson 등이 존재하는데

여기서는 본인이 생각하기에 직관적이고 편하다고 생각되는 gson 라이브러리를 사용한다.

 

GSON 라이브러리

gson 라이브러리를 import한다.

 

Gradle
// https://mvnrepository.com/artifact/com.google.code.gson/gson
implementation 'com.google.code.gson:gson:2.9.0'

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

 

Nested 형태일 경우

 

    String json = "{\n" +
            "    \"data\": [\n" +
            "        {\n" +
            "            \"email\": \"eskaferas@gmail.com\",\n" +
            "            \"firstName\": \"Seras\",\n" +
            "            \"lastName\": \"Meras\"\n" +
            "        },\n" +
            "        {\n" +
            "            \"email\": \"Soras@gmail.com\",\n" +
            "            \"firstName\": \"Oras\",\n" +
            "            \"lastName\": \"Moras\"\n" +
            "        },\n" +
            "        {\n" +
            "            \"email\": \"bzbzb@gmail.com\",\n" +
            "            \"firstName\": \"hello\",\n" +
            "            \"lastName\": \"bye\"\n" +
            "        },\n" +
            "        {\n" +
            "            \"email\": \"lrc@gmail.com\",\n" +
            "            \"firstName\": \"Seras\",\n" +
            "            \"lastName\": \"Meras\"\n" +
            "        }\n" +
            "    ],\n" +
            "    \"message\": \"Success\"\n" +
            "}\n";

 

위와 같이 { {...} ...} 의 nested 형태일 경우 다음과 같이 작성한다.

json의 data가 List 형태임을 주의.

 

public class Input {
    private String message;
    private List<Data> data;
}

public class Data {
    private String email;
    private String firstName;
    private String lastName;
}

 

@Test
void jsonParser() {
    Gson gson = new Gson();
    Input input = gson.fromJson(json, Input.class);
    System.out.println(input.getMessage());
    for (var datum : input.getData()) {
        System.out.println(datum.toString());
    }

 

출력 결과는 다음과 같다.

 

Success
Data(email=eskaferas@gmail.com, firstName=Seras, lastName=Meras)
Data(email=Soras@gmail.com, firstName=Oras, lastName=Moras)
Data(email=bzbzb@gmail.com, firstName=hello, lastName=bye)
Data(email=lrc@gmail.com, firstName=Seras, lastName=Meras)

 

Array 형태일 경우

String json = "[\n" +
        "{\n" +
        "\"name\": \"James\",\n" +
        "\"age\": \"27\",\n" +
        "\"clothes\": { \"upper\": \"shirt\", \"lower\": \"jeans\" }\n" +
        "},\n" +
        "{\n" +
        "\"name\": \"John\",\n" +
        "\"age\": \"32\",\n" +
        "\"clothes\": { \"upper\": \"hoodie\", \"lower\": \"jogger\" }\n" +
        "}" +
        "]";

 

위와 같이 json 포맷이 [...]로 되어있는 Array가 주어진다면 다음과 같이 코드를 작성한다.

public class Person {
    private String name;
    private Integer age;
    private Clothes clothes;
}

public class Clothes {

    private String upper;
    private String lower;
}

 

Entity[]로 받는 것이 핵심이다.

@Test
void jsonParser() {
    Gson gson = new Gson();
    Person[] persons = gson.fromJson(json, Person[].class);
    for (var person : persons) {
        System.out.println(person.toString());
    }
}

 

출력 결과는 다음과 같다.

Person(name=James, age=27, clothes=Clothes(upper=shirt, lower=jeans))
Person(name=John, age=32, clothes=Clothes(upper=hoodie, lower=jogger))

 

'CS > Java' 카테고리의 다른 글

비트 연산자 유즈 케이스 모음  (0) 2022.11.10
자바의 OOP  (0) 2022.10.25
자바에서 동시성 문제를 해결하는 방법  (0) 2022.09.17
자바의 <<, >>, >>>와 그의 활용  (0) 2022.09.06
자바의 변수 종류 정리  (0) 2022.08.31
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함