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))