Jackson의 ObjectMapper
Spring boot에 기본 내장
텍스트(String) 형태의 JSON -> Object, Object -> 텍스트(String) 형태의 JSON으로 변경해주는 라이브러리 com.fasterxml.jackson.care
구글의 Gson
dependency 가져오기
: https://mvnrepository.com/ 에서 원하는 라이브러리 검색 해서 Maven이나 gradle로 가져오기
A객체
import com.fasterxml.jackson.annotation.JsonProperty;
public class CarDto {
private String name;
@JsonProperty("carNum")
private String carNum;
@JsonProperty("Type")
private String type;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCarNum() {
return carNum;
}
public void setCarNum(String carNum) {
this.carNum = carNum;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override
public String toString() {
return "CarDto{" +
"name='" + name + '\'' +
", carNum='" + carNum + '\'' +
", type='" + type + '\'' +
'}';
}
}
B객체
public class UserDto {
private String name;
private int age;
private List<CarDto> 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;
}
public List<CarDto> getCars() {
return cars;
}
public void setCars(List<CarDto> cars) {
this.cars = cars;
}
@Override
public String toString() {
return "UserDto{" +
"name='" + name + '\'' +
", age=" + age +
", cars=" + cars +
'}';
}
}
메인
public class ObjMapMain {
public static void main(String args[]) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
/*
* window 경우 default가 ms-949이므로 에러 발생
* mac의 경우 default가 UTF-8
* project encoding 변경 필요
* 사용자 지정 vm프로퍼티에 -Dfile.encoding=UTF-8추가 후 재실행
*/
/*
* 객체에 값 set
* "name" : "",
* "age" : "",
* "cars":[{},{}]
*/
UserDto userDto = new UserDto();
userDto.setName("j장");
userDto.setAge(10);
CarDto carDto1 = new CarDto();
carDto1.setName("AUDI");
carDto1.setCarNum("11가1111");
carDto1.setType("4WD");
CarDto carDto2 = new CarDto();
carDto2.setName("BMS");
carDto2.setCarNum("22나2222");
carDto2.setType("2WD");
List<CarDto> carList = Arrays.asList(carDto1,carDto2);
userDto.setCars(carList);
//System.out.println(userDto);
// Object -> String형태의 JSON 데이터
// JSON 데이터가 길어서 확인이 어려울 경우 json validator(구글검색)로 확인가능
String json = objectMapper.writeValueAsString(userDto);
System.out.println("JSON 데이터 : "+json);
//
JsonNode jsonNode = objectMapper.readTree(json);
String name = jsonNode.get("name").asText();
String age = jsonNode.get("age").asText();
System.out.println("JSON 데이터 name : "+name);
System.out.println("JSON 데이터 age : "+age);
// JsonNode의 값은 json 전체{} 값을 가르킴
// "cars" : [{},{}]
JsonNode list = jsonNode.get("cars");
System.out.println("JsonNode : "+list);
// 배열 노드[]로 형변환
ArrayNode arrayNode = (ArrayNode) list;
System.out.println("ArrayNode : "+arrayNode);
// convertValue(변환전,변환후)
List<CarDto> cList = objectMapper.convertValue(arrayNode, new TypeReference<List<CarDto>>() {
});
System.out.println("List : "+cList);
// JsonNode 값 변경
ObjectNode objectNode = (ObjectNode) jsonNode;
objectNode.put("name","chali");
objectNode.put("age",20);
System.out.println("\n"+objectNode.toPrettyString());
}
}
sample.json
{
"name": "jay장",
"age": 10,
"cars": [
{
"name": "AUDI",
"carNum": "11가1111",
"type": "4WD"
},
{
"name": "BMW",
"carNum": "22나2222",
"type": "2WD"
}
]
}
'Spring > 99. etc..' 카테고리의 다른 글
Spring Boot Swagger 3.x 사용 (0) | 2022.12.31 |
---|---|
REST API 란? (0) | 2022.08.07 |