일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- windows
- json
- CSS
- html
- vscode
- IntelliJ
- javascript
- input
- Files
- Maven
- table
- Button
- 배열
- 이클립스
- Array
- ArrayList
- 자바
- date
- 문자열
- Visual Studio Code
- 이탈리아
- 인텔리제이
- list
- js
- 테이블
- Eclipse
- CMD
- 자바스크립트
- Java
- string
- Today
- Total
어제 오늘 내일
[Java] Gson 라이브러리 사용법 및 예제 ( Json 생성, 변환 ) 본문
이번에는 Gson 라이브러리로,
Java에서 Json을 다루는 방법을 알아보도록 하겠습니다.
1. Gson은
Gson은 Java에서 Json을 파싱하고, 생성하기 위해 사용되는
구글에서 개발한 오픈소스입니다.
Java Object를 Json 문자열로 변환할 수 있고, Json 문자열을 Java Object로 변환할 수 있습니다.
2. Gson 라이브러리 추가하기
Maven
JSON 파싱에 사용할 json-simple 라이브러리를 추가하기 위해
pom.xml 파일에 아래와 같이 dependency를 추가합니다.
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.7</version>
</dependency>
Gradle
dependencies {
implementation 'com.google.code.gson:gson:2.8.7'
}
직접 추가하기
https://search.maven.org/artifact/com.google.code.gson/gson/2.8.7/jar
위 링크에서 jar를 직접 다운받아서, 라이브러리에 추가합니다.
3. Gson 객체 생성하기
Gson 객체를 생성하는 방법은 2가지가 있습니다.
- new Gson()
- new GsonBuilder.create()
new GsonBuilder()을 이용하여 Gson 객체를 생성하면, 몇 가지 옵션을 추가해서 객체를 생성할 수 있습니다.
코드
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class CreateGson {
public static void main(String[] args) {
// new
Gson gson1 = new Gson();
// GsonBuilder
Gson gson2 = new GsonBuilder().create();
Gson gson3 = new GsonBuilder().setPrettyPrinting().create();
}
}
4. Json 생성하기
코드
import com.google.gson.Gson;
import com.google.gson.JsonObject;
public class GsonExample {
public static void main(String[] args) {
Gson gson = new Gson();
// Json key, value 추가
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("name", "anna");
jsonObject.addProperty("id", 1);
// JsonObject를 Json 문자열로 변환
String jsonStr = gson.toJson(jsonObject);
// 생성된 Json 문자열 출력
System.out.println(jsonStr); // {"name":"anna","id":1}
}
}
jsonObject.addProperty("name", "anna");
JsonObject 객체를 생성하여,
이 객체에 프로퍼티를 추가하였습니다.
5. Object -> Json 변환하기
Student 클래스
public class Student {
private int id;
private String name;
public Student(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}
}
Json으로 변환한 클래스입니다.
id와 name, 이렇게 2개의 field를 가지고,
이 2개의 field의 값을 세팅하는 Constructor를 가지고 있습니다.
Student 클래스를 Json 문자열로 변환
import com.google.gson.Gson;
public class ObjectToJson {
public static void main(String[] args) {
// Student 객체 생성
Student student = new Student(1, "Anna");
// Gson 객체 생성
Gson gson = new Gson();
// Student 객체 -> Json 문자열
String studentJson = gson.toJson(student);
// Json 문자열 출력
System.out.println(studentJson); // {"id":1,"name":"Anna"}
}
}
String studentJson = gson.toJson(student);
student 객체를 Json 문자열로 변환하였습니다.
Student 클래스는 id, name 이렇게 2개의 field를 가지고 있고,
student 객체는 id는 1, name은 "Anna"라는 값을 가지고 있습니다.
이를 이용하여, Json 객체가 생성되었습니다.
6. Json -> Object 변환하기
Student 클래스
public class Student {
private int id;
private String name;
public Student(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}
}
Json 문자열을 Student 클래스로 변환
import com.google.gson.Gson;
public class JsonToObject {
public static void main(String[] args) {
// Json 문자열
String jsonStr = "{\"id\":1,\"name\":\"Anna\"}";
// Gson 객체 생성
Gson gson = new Gson();
// Json 문자열 -> Student 객체
Student student = gson.fromJson(jsonStr, Student.class);
// Student 객체 toString() 출력
System.out.println(student); // Student [id=1, name=Anna]
}
}
Student student = gson.fromJson(jsonStr, Student.class);
Json 문자열을 Student 클래스로 변환하였습니다.
7. Map -> Json 문자열 변환하기
Map을 Json 문자열로 변환
import com.google.gson.Gson;
public class MapToJson {
public static void main(String[] args) {
// Map
Map<String, String> map = new HashMap<>();
map.put("id", "1");
map.put("name", "Anna");
// Map -> Json 문자열
Gson gson = new Gson();
String jsonStr = gson.toJson(map);
// Json 문자열 출력
System.out.println(jsonStr); // {"name":"Anna","id":"1"}
}
}
String jsonStr = gson.toJson(map);
Map을 Json 문자열로 변환하였습니다.
Object를 Json 문자열로 변환하는 방법과 같습니다.
8. Json 문자열 -> Map 변환하기
Json 문자열을 Map으로 변환
import java.util.Map;
import com.google.gson.Gson;
public class JsonToMap {
public static void main(String[] args) {
// Json 문자열
String jsonStr = "{\"id\":\"1\",\"name\":\"Anna\"}";
// Gson 객체 생성
Gson gson = new Gson();
// Json 문자열 -> Map
Map<String, Object> map = gson.fromJson(jsonStr, Map.class);
// Map 출력
for (Map.Entry<String, Object> entry : map.entrySet()) {
System.out.println(entry.getKey() + "=" + entry.getValue());
}
}
}
결과
id=1
name=Anna
Map<String, Object> map = gson.fromJson(jsonStr, Map.class);
Json 문자열을 Map으로 변환하였습니다.
Json 문자열을 Object로 변환하는 방법과 같습니다.
9. Json 문자열 예쁘게 출력하기
코드
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class PrettyPrinting {
public static void main(String[] args) {
// Json 문자열로 변환할 Student 객체
Student student = new Student(1, "Anna");
// PrettyPrinting 옵션을 추가하여 Gson 객체 생성
Gson gson = new GsonBuilder().setPrettyPrinting().create();
// Student 객체 -> Json 문자열
String studentJson = gson.toJson(student);
// Json 문자열 출력 ( 예쁘게 출력 )
System.out.println(studentJson);
}
}
결과
{
"id": 1,
"name": "Anna"
}
Gson gson = new GsonBuilder().setPrettyPrinting().create();
Json 문자열을 보기 좋게 출력하기 위해서,
Gson 객체를 생성할 때, PrettyPrinting 옵션을 추가하였습니다.
이 옵션을 적용하면, Json 문자열에 Indent, 줄바꿈이 적절이 적용되어
Json 문자열의 가독성이 높아집니다.
10. 값이 null인 field의 Json property 생성
코드
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class NullObject {
public static void main(String[] args) {
// 이름이 null인 Student 객체
Student student = new Student(1, null);
// 1. default
// 값이 null인 field는, Json에 포함시키지 않습니다.
Gson gsonWithoutNull = new Gson();
String studentJson = gsonWithoutNull.toJson(student);
System.out.println(studentJson); // {"id":1}
// 2. serializeNulls 옵션
// 값이 null인 field도, Json에 포함시킵니다.
Gson gsonWithNull = new GsonBuilder().serializeNulls().create();
String studentJsonWithNull = gsonWithNull.toJson(student);
System.out.println(studentJsonWithNull); // {"id":1,"name":null}
}
}
Gson gsonWithoutNull = new Gson();
Default로 Gson 객체를 생성하고, 이 객체로 Json 문자열을 생성하면,
Json 문자열로 변환될 객체(여기서는 student)의 field 값이 null일 경우,
null인 field는 Json의 property로 생성하지 않습니다.
Gson gsonWithNull = new GsonBuilder().serializeNulls().create();
Gson 객체를 생성할 때, serializeNulls 옵션을 추가하면,
Json 문자열로 변환될 객체의 field 값이 null일 경우,
null인 field도 Json의 property로 생성합니다.
11. Field 제외하고, Json 문자열 만들기
11. 1 transient
transient는 객체를 직렬화(Serialize) 할 때, 특정 필드를 제외하고 싶을 때 사용합니다.
제외하려고 하는 필드에 transient를 붙이면,
해당 필드를 제외하고 Json 문자열이 생성됩니다.
Student 클래스
public class Student {
private transient int id;
private String name;
public Student(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}
}
private transient int id;
id를 transient 했습니다.
id 필드 제외
import com.google.gson.Gson;
public class ExcludeTransient {
public static void main(String[] args) {
// Student 객체 생성
Student student = new Student(1, "Anna");
// Gson 객체 생성
Gson gson = new Gson();
// Student 객체 -> Json 문자열
String studentJson = gson.toJson(student);
// Json 문자열 출력
System.out.println(studentJson); // {"name":"Anna"}
}
}
생성된 Json 문자열에 'id' 항목이 포함되지 않았습니다.
11. 2 @Expose Annotation
객체가 Json 문자열로 변환되거나(Serialized), Json 문자열이 객체로 변환될 때(Deserialized)
Gson의 '@Expose' 어노테이션을 이용하여
특정 필드가 포함될지, 포함되지 않을지 결정 할 수 있습니다.
@Expose(serialize = true);
@Expose(serialize = false);
@Expose(deserialize = true);
@Expose(deserialize = false);
@Expose(serialize = true , deserialize = false);
@Expose(serialize = false, deserialize = true);
- 특정 필드의 serialize 값이 true이면, 객체가 Json 문자열로 변환될 때, 해당 필드가 포함됩니다.
- 특정 필드의 serialize 값이 false이면, 객체가 Json 문자열로 변환될 때, 해당 필드가 제외됩니다.
- 특정 필드의 deserialize 값이 true이면, Json 문자열이 객체로 변환될 때, 필드에 값이 세팅됩니다.
- 특정 필드의 deserialize 값이 false이면, Json 문자열이 객체로 변환될 때, 필드에 값이 세팅되지 않습니다.
- @Expose 어노테이션은, excludeFieldsWithoutExposeAnnotation 옵션이 적용된 Gson 객체로,
Json을 생성하거나(toJson()), 객체를 생성할 때만(fromJson()) 유효합니다. - excludeFieldsWithoutExposeAnnotation 옵션이 적용된 Gson 객체로,
Json을 생성하거나(toJson()), 객체를 생성할 때(fromJson())
@Expose 어노테이션이 없으면, 해당 필드는 무시됩니다.
@Expose 가 적용된 Student 클래스
import com.google.gson.annotations.Expose;
public class Student {
@Expose(serialize = false, deserialize = true)
private int id;
@Expose(serialize = true, deserialize = false)
private String name;
private String major;
public Student(int id, String name, String major) {
this.id = id;
this.name = name;
this.major = major;
}
@Override
public String toString() {
return "Student [id=" + id + ", major=" + major + ", name=" + name + "]";
}
}
@Expose(serialize = false, deserialize = true)
private int id;
'id' field는
객체 -> Json 변환시에는 제외되고,
Json -> 객체 변환시에는 포함됩니다.
@Expose(serialize = true, deserialize = false)
private String name;
'name' field는
객체 -> Json 변환시에는 포함되고,
Json -> 객체 변환시에는 제외됩니다.
private String major;
@Expose 어노테이션이 명시되지 않은
'major' 필드는,
객체 -> Json 변환시에도 제외되고,
Json -> 객체 변환시에도 제외됩니다.
객체 -> Json 변환
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class ExcludeExposeSerialize {
public static void main(String[] args) {
// Student 객체 생성
Student student = new Student(1, "Anna", "CS");
// Gson 객체 생성
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
// Student 객체 -> Json 문자열
String studentJson = gson.toJson(student);
// Json 문자열 출력
System.out.println(studentJson); // {"name":"Anna"}
}
}
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
@Expose 어노테이션을 적용하기 위해서
excludeFieldsWithoutExposeAnnotation 옵션을 적용하여
Gson 객체를 생성하였습니다.
System.out.println(studentJson); // {"name":"Anna"}
객체 -> Json으로 변환하는 경우
serialize가 true로 선언된 'name' 필드만
Json 문자열에 포함되었습니다.
serialize가 false로 선언된 'id' 필드와
@Expose 어노테이션이 없는 'major' 필드는 제외되었습니다.
Json -> 객체 변환
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class ExcludeExposeDeserialize {
public static void main(String[] args) {
// Json 문자열
String jsonStr = "{\"id\":1,\"name\":\"Anna\", \"major\":\"CS\"}";
// Gson 객체 생성
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
// Json 문자열 -> Student 객체
Student student = gson.fromJson(jsonStr, Student.class);
// Student 객체 toString() 출력
System.out.println(student); // Student [id=1, major=null, name=null]
}
}
System.out.println(student); // Student [id=1, major=null, name=null]
Json -> 객체로 변환하는 경우
deserialize가 true로 선언된 'id' 필드만
객체 필드에 값이 세팅되었습니다.
deserialize가 false로 선언된 'name' 필드와
@Expose 어노테이션이 없는 'major' 필드는 값이 세팅되지 않았습니다.
11. 3 ExclusionStrategy
ExclusionStrategy 인터페이스를 구현하고,
Gson에 ExclusionStrategy 인터페이스를 구현한 객체를 세팅하여
객체의 특정 필드를 제외할 수 있습니다.
Student 클래스
public class Student {
private int id;
private String name;
private String major;
public Student(int id, String name, String major) {
this.id = id;
this.name = name;
this.major = major;
}
@Override
public String toString() {
return "Student [id=" + id + ", major=" + major + ", name=" + name + "]";
}
}
객체 -> Json 변환
import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class ExcludeExclusionStrategy {
public static void main(String[] args) {
// ExclusionStrategy 인터페이스 구현
ExclusionStrategy exclusionStrategy = new ExclusionStrategy() {
public boolean shouldSkipField(FieldAttributes fieldAttributes) {
if ("id".equals(fieldAttributes.getName())) {
return true;
}
return false;
}
public boolean shouldSkipClass(Class aClass) {
return false;
}
};
// Student 객체 생성
Student student = new Student(1, "Anna", "CS");
// Gson 객체 생성 (ExclusionStrategies 옵션)
Gson gson = new GsonBuilder().setExclusionStrategies(exclusionStrategy).create();
// Student 객체 -> Json 문자열
String studentJson = gson.toJson(student);
// Json 문자열 출력
System.out.println(studentJson); // {"name":"Anna","major":"CS"}
}
}
ExclusionStrategy exclusionStrategy = new ExclusionStrategy() { ... }
Exclusionstrategy 인터페이스를 구현하고, 객체를 생성하였습니다.
shouldSkipField() 메소드 안에서 제외할 필드를 정의합니다.
shouldSkipField() 메소드는 필드를 파라미터로 받습니다.
shouldSkipField() 메소드에, 필드가 들어왔을 때, true를 리턴하면 해당 필드는 제외됩니다.
여기서는, "id" 필드가 제외됩니다.
Gson gson = new GsonBuilder().setExclusionStrategies(exclusionStrategy).create();
Gson 객체를 생성할 때,
ExclusionStrategy 인터페이스를 구현한 객체를 세팅하였습니다.
System.out.println(studentJson); // {"name":"Anna","major":"CS"}
exclusionStrategy 객체에서 제외된 'id' 항목이 제외된 Json 문자열이 생성되었습니다.
12. Field Naming
12. 1 특정 Field 이름 바꾸기 (@SerializedName)
객체로 Json 문자열을 생성하거나,
Json 문자열을 객체로 변경할 때,
@SerializedName 어노테이션을 사용하여,
특정 필드의 이름을 원하는 이름으로 바꾸어서 맵핑할 수 있습니다.
Person.java (VO)
import com.google.gson.annotations.SerializedName;
public class Person {
@SerializedName("personId") private int id;
private String krName;
private String enName;
public Person(int id, String krName, String enName) {
this.id = id;
this.krName = krName;
this.enName = enName;
}
@Override
public String toString() {
return "Person [enName=" + enName + ", id=" + id + ", krName=" + krName + "]";
}
}
@SerializedName("personId") private int id;
id 필드에 '@SerializedName' 어노테이션을 추가하였습니다.
Gson으로 이 객체를 Json으로 변환하면,
'personId'라는 이름으로 프로퍼티가 생성될 것입니다.
Person -> Json, Json -> Person
import com.google.gson.Gson;
public class FieldNaming {
public static void main(String[] args) {
// Gson 객체 준비
Gson gson = new Gson();
// 1. Person 객체를 Json 문자열로 변환
Person person = new Person(1, "애나", "Anna");
String jsonStr = gson.toJson(person);
// 결과 출력
System.out.println(jsonStr); // {"personId":1,"krName":"애나","enName":"Anna"}
// 2. Json 문자열을 Person 객체로 변환
String str = "{\"personId\":2,\"krName\":\"김\",\"enName\":\"Kim\"}";
Person person2 = gson.fromJson(str, Person.class);
System.out.println(person2); // Person [enName=Kim, id=2, krName=김]
}
}
line 11 ~ 16
Person 객체를 Json으로 변경하였습니다.
Person 클래스에서 @SerializedName 어노테이션으로 'id' 필드의 이름을 변경하였기 때문에,
Json 문자열에 'id' 프로퍼티 대신, 'personId'라는 이름의 프로퍼티가 생성되었습니다.
line 20 ~ 24
Json 문자열을 읽어서, Person 객체로 변환하였습니다.
Person 클래스에서 @SerializedName 어노테이션으로 'id' 필드의 이름을 변경하였기 때문에,
Json 문자열의 'personId' 프로퍼티 값을, Person 객체의 id 필드에 맵핑하였습니다.
12. 2 Field Naming Rule 적용하기 ( FieldNamingPolicy )
Gson 객체를 생성할 때 FieldNamingPolicy 옵션을 주면,
정해진 규칙에 따라서 Json 파일의 프로퍼티 이름을 생성하고, 읽을 수 있습니다.
Person.java (VO)
public class Person {
private int id;
private String krName;
private String enName;
public Person(int id, String krName, String enName) {
this.id = id;
this.krName = krName;
this.enName = enName;
}
@Override
public String toString() {
return "Person [enName=" + enName + ", id=" + id + ", krName=" + krName + "]";
}
}
각 필드의 이름이 Camel Case 로 작성되어 있습니다.
Person -> Json, Json -> Person
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class FieldNamingPolicyExample {
public static void main(String[] args) {
// Person 객체 준비
Person person = new Person(1, "애나", "Anna");
// Gson 객체 준비
// FieldNamingPolity 적용 (LOWER_CASE_WITH_UNDERSCORES)
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.create();
// 1. Person 객체를 Json 문자열로 변환
String jsonStr = gson.toJson(person);
// 결과 출력
System.out.println(jsonStr); // {"id":1,"kr_name":"애나","en_name":"Anna"}
// 2. Json 문자열을 Person 객체로 변환
String str = "{\"id\":2,\"kr_name\":\"김\",\"en_name\":\"Kim\"}";
Person person2 = gson.fromJson(str, Person.class);
System.out.println(person2); // Person [enName=Kim, id=2, krName=김]
}
}
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.create();
Gson 객체를 생성할 때, FieldNamingPolicy 옵션을 추가하였습니다.
파라미터로 전달된 'FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES'는
객체를 Json 문자열로 만들거나, Json 문자열의 프로퍼티를 객체의 필드와 맵핑할 때,
Camel Case로 작성된 객체의 필드를
각각의 단어를 '_'로 구분하는 소문자로 이름을 변경하여 맵핑합니다.
line 18 ~ 22
Person 객체를 Json으로 변경하였습니다.
생성된 Json 문자열의 프로퍼티명이 모두 '_'로 구분되는 소문자로 변경되었습니다.
line 26 ~ 30
Json 문자열을 읽어서, Person 객체로 변환하였습니다.
Json 문자열의 프로퍼티 이름은 모두 소문자와 '_'로 이루어졌지만,
Camel Case를 따르는 Person 객체의 필드와 잘 맵핑되었습니다.
FieldNamingPolicy 옵션
옵션명 | 예제 |
IDENTITY | 변경 없음 |
LOWER_CASE_WITH_DASHES | someFieldName ---> some-field-name _someFieldName ---> _some-field-name aStringField ---> a-string-field aURL ---> a-u-r-l |
LOWER_CASE_WITH_DOTS | someFieldName ---> some.field.name _someFieldName ---> _some.field.name aStringField ---> a.string.field aURL ---> a.u.r.l |
LOWER_CASE_WITH_UNDERSCORES | someFieldName ---> some_field_name _someFieldName ---> _some_field_name aStringField ---> a_string_field aURL ---> a_u_r_l |
UPPER_CAMEL_CASE | someFieldName ---> SomeFieldName _someFieldName ---> _SomeFieldName |
UPPER_CAMEL_CASE_WITH_SPACES | someFieldName ---> Some Field Name _someFieldName ---> _Some Field Name |
13. Json 문자열 Parsing
파싱할 Json
{
"id" : 1,
"students": [
"Anna", "Jerry"
],
"subject": {
"name" : "Java",
"professor" : "Tony"
}
}
Json 파싱
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class JsonStringParse {
public static void main(String[] args) {
String json = "{\"id\":1,\"students\": [\"Anna\", \"Jerry\"],\"subject\":{\"name\":\"Java\",\"professor\":\"Tony\"}}";
// 문자열 parsing
JsonElement element = JsonParser.parseString(json);
// element가 Object 타입인 경우 JsonObject 타입으로 변환
JsonObject object = element.getAsJsonObject();
// id 값 확인 (primitive type)
long id = object.get("id").getAsLong();
System.out.println("id : " + id); // id : 1
// students 값 확인 (배열)
JsonArray studentsJsonArray = object.get("students").getAsJsonArray();
// JsonArray studentsJsonArray = object.getAsJsonArray("students");
for (int i = 0; i < studentsJsonArray.size(); i++) {
String student = studentsJsonArray.get(i).getAsString();
System.out.println("student[" + i + "] : " + student); // student[0] : Anna, student[1] : Jerry
}
// subject 값 확인 (Object)
JsonObject subjectJsonObject = object.get("subject").getAsJsonObject();
// JsonObject subjectJsonObject = object.getAsJsonObject("subject");
String subjectName = subjectJsonObject.get("name").getAsString();
String subjectProfessor = subjectJsonObject.get("professor").getAsString();
System.out.println("subject.name : " + subjectName); // subject.name : Java
System.out.println("subject.professor : " + subjectProfessor); // subject.professor : Tony
}
}
위 코드는 JsonParser를 이용하여,
Json을 Parsing 하고,
각 property의 값울 추출하는 코드입니다.
JsonElement element = JsonParser.parseString(json);
JsonParser.parseString() 메소드를 이용하여
Json 문자열을 parsing하고, JsonElement 객체를 리턴하였습니다.
( Gson 2.8.6 버전 이전에는 JsonParser의 parse() 메소드를 이용하여 파싱하였습니다.
그러나, Gson 2.8.6부터는
JsonParser의 생성자와 parse() 메소드가 deprecated 되었습니다. )
JsonObject object = element.getAsJsonObject();
JsonElement는 다음의 4가지 타입으로 변환될 수 있습니다.
- JsonObject
- JsonArray
- JsonNull
- JsonPrimitive
long id = object.get("id").getAsLong();
"id"에 해당하는 값을 Long 타입으로 가져옵니다.
JsonArray studentsJsonArray = object.get("students").getAsJsonArray();
JsonArray studentsJsonArray = object.getAsJsonArray("students");
"students"는 배열 값을 가지고 있으므로
JsonArray 타입으로 값을 가져옵니다.
JsonObject subjectJsonObject = object.get("subject").getAsJsonObject();
JsonObject subjectJsonObject = object.getAsJsonObject("subject");
"subject"는 객체 값을 가지고 있으므로,
JsonObject 타입으로 값을 가지고 옵니다.
'IT > Java' 카테고리의 다른 글
[Java] Jackson 라이브러리를 이용하여 JSON을 Object로 변환하기 (0) | 2021.09.05 |
---|---|
[Java] GSON을 이용한 Json 파일 읽기 / 저장하기 (1) | 2021.07.18 |
[Java] 여러개의 Set 객체 합치기 (0) | 2021.07.17 |
[Java / json-simple] JSON에 데이터 추가, 변경, 삭제하기 (0) | 2021.07.17 |
[Java / json-simple] Map을 JSON으로 변경하기 (0) | 2021.07.17 |