Obejct Mapper
프로젝트 기본 설정
프로젝트에서 출력한 값 Json 포맷인지 확인하기
실습 내용
dto 패키지 작성 및 클래스 작성(User, Car)
// User.java
package dto;
import java.util.List;
public class User {
private String name;
private int age;
private List<Car> cars;
public List<Car> getCars() {
return cars;
}
public void setCars(List<Car> cars) {
this.cars = cars;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", cars=" + cars +
'}';
}
}
// Car.java
package dto;
import com.fasterxml.jackson.annotation.JsonProperty;
public class Car {
private String name;
// snake case, camel case 통일(by @JsonProperty)
@JsonProperty("car_number")
private String carNumber;
@JsonProperty("TYPE")
private String type;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCarNumber() {
return carNumber;
}
public void setCarNumber(String carNumber) {
this.carNumber = carNumber;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override
public String toString() {
return "Car{" +
"name='" + name + '\'' +
", carNumber='" + carNumber + '\'' +
", type='" + type + '\'' +
'}';
}
}
// Main.java
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import dto.Car;
import dto.User;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
User user = new User();
user.setName("홍길동");
user.setAge(10);
Car car1 = new Car();
car1.setName("K5");
car1.setCarNumber("11가 1111");
car1.setType("sedan");
Car car2 = new Car();
car2.setName("Q5");
car2.setCarNumber("22가 2222");
car2.setType("SUV");
List<Car> carList = Arrays.asList(car1, car2);
user.setCars(carList);
// user를 String 타입으로 변환
String json = objectMapper.writeValueAsString(user);
System.out.println("--- user를 String 타입으로 변환 ---");
System.out.println(json);
System.out.println();
// String json 값을 Json 형태로 바꿔서
JsonNode jsonNode = objectMapper.readTree(json);
// 하나씩 Parsing
String _name = jsonNode.get("name").asText(); // name이라는 field로 가져오기
int _age = jsonNode.get("age").asInt();
System.out.println("--- Json 형태로 바꾸고 하나씩 Parsing ---");
System.out.println("name : " + _name);
System.out.println("age : " + _age);
System.out.println();
// 배열 node 표현 및 가져오기(구조를 알고 있는 경우)
JsonNode cars = jsonNode.get("cars");
ArrayNode arrayNode = (ArrayNode)cars;
// 원하는 타입으로 바꾸기
// object 넣고, 우리가 원하는 타입 넣어서 Mapping
List<Car> _cars = objectMapper.convertValue(arrayNode, new TypeReference<List<Car>>() {});
System.out.println("--- 배열 node 가져오기 ---");
System.out.println(_cars);
System.out.println();
// put 메소드로 기존의 value 수정
ObjectNode objectNode = (ObjectNode) jsonNode;
objectNode.put("name", "steve");
objectNode.put("age", 20);
System.out.println("--- ObjectNode의 put 메소드로 기존 값 수정 ---");
System.out.println(objectNode.toPrettyString());
System.out.println();
}
}
실행 결과
Object를 String 타입으로 변환
String json = objectMapper.writeValueAsString(user);
String을 Json 형태로 바꿔서 하나씩 Parsing
JsonNode jsonNode = objectMapper.readTree(json);
String _name = jsonNode.get("name").asText();
배열의 node 가져오기
JsonNode cars = jsonNode.get(“cars”);
ArrayNode arrayNode = (ArrayNode)cars;
List<Car> _cars = objectMapper.convertValue(arrayNode, new TypeReference<List<Car>>() {});
기존의 value 수정하고 출력하기
ObjectNode objectNode = (ObejctNode) jsonNode;
objectNode.put(“name”, “steve”);
System.out.println(objectNode.toPrettyString());