일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 문자열
- IntelliJ
- 테이블
- 자바스크립트
- input
- windows
- list
- Visual Studio Code
- vscode
- Eclipse
- string
- Button
- javascript
- 이클립스
- 자바
- date
- json
- ArrayList
- 배열
- html
- 인텔리제이
- Files
- 이탈리아
- js
- CSS
- Maven
- Array
- CMD
- Java
- table
- Today
- Total
어제 오늘 내일
[Java] Jackson 라이브러리를 이용하여 JSON을 Object로 변환하기 본문
Jackson 라이브러리를 이용하여
JSON 문자열을 Java Object로 변환하는 방법을 정리하였습니다.
1. Jackson 라이브러리 설치
Java JSON 라이브러리로 많이 알려진 Jackson 라이브러리는 크게 3가지 라이브러리로 구성되어 있습니다.
Jackson-annotations는 Jackson-core를 사용하고,
Jackson-databind는 Jackson-annotations 라이브러리를 사용합니다.
따라서, Jackson-databind를 maven dependency에 추가하면
나머지 라이브러리들도 설치됩니다.
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.4</version>
</dependency>
2. JSON 문자열 -> Java Object
Jackson의 ObejctMapper 라이브러리를 이용하여
JSON 문자열을 지정한 Java Object로 맵핑하여 변환 할 수 있습니다.
Student.java
public class Student {
private int id;
private String name;
public Student() {
}
public Student(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}
}
아래 예제에서 JSON 문자열을 Student 객체로 변환 할 것입니다.
Student 클래스는
id, name 필드를 가지고 있고,
id, name에 대한 getter, setter 메소드를 가지고 있습니다.
JsonStringToObject.java
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonStringToObject {
public static void main(String[] args) throws JsonMappingException, JsonProcessingException {
// {"id" : 1, "name" : "Anna"}
String jsonStr = "{\"id\" : 1, \"name\" : \"Anna\"}";
// jackson objectmapper 객체 생성
ObjectMapper objectMapper = new ObjectMapper();
// JSON String -> Student Object
Student student = objectMapper.readValue(jsonStr, Student.class);
// Student 객체 출력
System.out.println(student); // Student [id=1, name=Anna]
}
}
Student student = objectMapper.readValue(jsonStr, Student.class);
ObjectMapper의 readValue() 메소드를 이용하여
JSON 문자열을 Student 객체로 변환하였습니다.
readValue()의 첫번째 파라미터로는, 변환 대상 JSON 문자열을 입력하였습니다.
첫번째 파라미터 자리에는 위 예제처럼 JSON 문자열 뿐만 아니라, stream, file 형태가 들어갈 수도 있습니다.
두번째 파라미터에는, JSON을 변환하여 만들 객체의 타입을 넣어줍니다.
여기서는, Student 클래스를 넣어주었습니다.
ObjectMapper는 JSON을 객체로 맵핑할 때,
JSON의 이름과 객체의 getter, setter 메소드의 필드명을 비교하여 자동으로 맵핑해줍니다.
3. JSON 문자열 -> Map
import java.util.Map;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonStringToMap {
public static void main(String[] args) throws JsonMappingException, JsonProcessingException {
// {"id" : 1, "name" : "Anna"}
String jsonStr = "{\"id\" : 1, \"name\" : \"Anna\"}";
// jackson objectmapper 객체 생성
ObjectMapper objectMapper = new ObjectMapper();
// JSON String -> Map
Map<String, Object> jsonMap
= objectMapper.readValue(jsonStr, new TypeReference<Map<String, Object>>() {});
// Student 객체 출력
System.out.println(jsonMap); // {id=1, name=Anna}
}
}
역시, ObjectMapper의 readValue() 메소드를 사용하여
JSON 문자열을 Map으로 변경하였습니다.
4. JSON Array 문자열 -> Java Object 배열
import java.util.Arrays;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonArrayStringToObjectArray {
public static void main(String[] args) throws JsonMappingException, JsonProcessingException {
// [{"id" : 1, "name" : "Anna"}, {"id" : 2, "name" : "Brian"}]
String jsonArrStr = "[{\"id\" : 1, \"name\" : \"Anna\"}, {\"id\" : 2, \"name\" : \"Brian\"}]";
// jackson objectmapper 객체 생성
ObjectMapper objectMapper = new ObjectMapper();
// JSON Array String -> 배열
Student[] studentArr = objectMapper.readValue(jsonArrStr, Student[].class);
// 배열 객체 출력
System.out.println(Arrays.toString(studentArr)); // [Student [id=1, name=Anna], Student [id=2, name=Brian]]
}
}
배열 형태의 JSON을 배열 객체로 변경하였습니다.
5. JSON Array 문자열 -> Java Object List
import java.util.List;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonArrayStringToObjectList {
public static void main(String[] args) throws JsonMappingException, JsonProcessingException {
// [{"id" : 1, "name" : "Anna"}, {"id" : 2, "name" : "Brian"}]
String jsonArrStr = "[{\"id\" : 1, \"name\" : \"Anna\"}, {\"id\" : 2, \"name\" : \"Brian\"}]";
// jackson objectmapper 객체 생성
ObjectMapper objectMapper = new ObjectMapper();
// JSON Array String -> List
List<Student> studentList
= objectMapper.readValue(jsonArrStr, new TypeReference<List<Student>>() {});
// List 객체 출력
System.out.println(studentList); // [Student [id=1, name=Anna], Student [id=2, name=Brian]]
}
}
배열 형태의 JSON을 List 객체로 변환하였습니다.
6. JSON 파일 -> Java Object
student.json
{
"id": 1,
"name": "Anna"
}
먼저, 읽어들일 json파일(student.json)을 생성하였습니다.
import java.io.File;
import java.io.IOException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonFileToObject {
public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
// {"id" : 1, "name" : "Anna"}
File file = new File("c://student.json");
// jackson objectmapper 객체 생성
ObjectMapper objectMapper = new ObjectMapper();
// JSON File -> Student Object
Student student = objectMapper.readValue(file, Student.class);
// Student 객체 출력
System.out.println(student); // Student [id=1, name=Anna]
}
}
JSON 파일을 읽어서, 파일의 내용을 객체로 변환하였습니다.
7. Input Stream JSON -> Java Object
mport java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonInputStreamToObject {
public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
// {"id" : 1, "name" : "Anna"}
InputStream input = new FileInputStream("c://student.json");
// jackson objectmapper 객체 생성
ObjectMapper objectMapper = new ObjectMapper();
// JSON InputStream -> Student Object
Student student = objectMapper.readValue(input, Student.class);
// Student 객체 출력
System.out.println(student); // Student [id=1, name=Anna]
}
}
JSON InputStream을 읽어서, 객체로 변환하였습니다.
Jackson 라이브러리를 사용하여
JSON 문자열을 Java 객체로 변경하는 방법을 알아보았습니다.
'IT > Java' 카테고리의 다른 글
[Java] Jackson으로 Json 변환 시, 날짜 포맷 적용하기(DateFormat) (0) | 2021.09.05 |
---|---|
[Java] Jackson 라이브러리를 이용하여 Object를 JSON으로 변환하기 (0) | 2021.09.05 |
[Java] GSON을 이용한 Json 파일 읽기 / 저장하기 (1) | 2021.07.18 |
[Java] Gson 라이브러리 사용법 및 예제 ( Json 생성, 변환 ) (4) | 2021.07.18 |
[Java] 여러개의 Set 객체 합치기 (0) | 2021.07.17 |