JSON
- json은 데이터 교환 방식을 나타내는 형식이다.
ObjectMapper 클래스
- json과 자바객체간의 변환(파싱(json→자바 객체), 직렬화(객체→json))을 도와주는 클래스
Path filePath = Paths.get("파일 주소 or url");
String str = Files.readString(filePath);
-->Path클래스는 파일 또는 디렉토리의 경로를 나타내는 객체
-->Paths는 Path클래스의 객체를 만들기 위한 유틸리티 클래스
(유틸리티 클래스란 정적 메서드만 존재해 객체를 만들 수 없고 어떠한 기능들만 묶은 도구상자같은
느낌. 대표적인 유틸리티클래스가 Math클래스)
-->Files클래스도 파일을 읽고 쓰는 등 파일과 관련한 작업을 위한 기능을 묶어놓은 유틸리티클래스
*ObjectMapper클래스 와 readValue(), readTree()메서드*
ObjectMapper objectMapper = new ObjectMapper(); // ObjectMapper클래스의 객체를 생성하고,
Map<String, String> map = objectMapper.readValue(str,Map.class);
-->ObjectMapper의 readValue메서드는 String객체로 받은 json파일을 바로 클래스로 변환해준다.
JsonNode jsonNode = objectMapper.readTree(str);
-->ObjectMapper의 readTree메서드는 String객체로 받은 json파일을 JsonNode객체로 변환해준다.
-----------------------------------------------------------------------------------------
예를 들어, jsonNode 파일안에 여러명 학생에 대한 정보가 배열형태로있고,
이를 학생 리스트에 저장해본다고 하자.
Path filePath = Paths.get("학생정보가 들어있는 json파일 경로")
String str = Files.readString(filePath);
ObjectMapper obj = new ObjectMapper();
JsonNode jn = obj.readTree(str);
List<Student> studentList = new ArrayList<>();
for(JsonNode j : jn ){
studentList.add(obj.readValue(j.toString(),Student.class);
}
-->readTree메서드를 통해 json 전체파일을 하나의 JsonNode 타입으로 변환하면
배열 형태로 각 인덱스에 저장되어있는 학생 한명 한명의 정보가 그대로 한 개 한개의
JsonNode로 변환된다. 따라서
그 하나하나의 JsonNode를 toSting메서드를 통해 문자화 한 다음 readValue메서드를 통해 바로
Student클래스로 변환하면 리스트에 add할 수 있는 것이다.
public class Student{
**필드 선언(필드는 json파일에 등록되어있는 학생정보와 일치해야한다)**
private String name;
private int score;
private int rank;
**게터 메서드 선언**
public String GetName(){
return this.name;}
public int GetScore(){
return this.score;}
public int GetRank(){
return this.rank;}
}
----------------------------------------------------------------------
-->ObjectMapper를 통해 json파일을 객체로 변환할 때 먼저 객체에 대한 클래스를 생성
해주어야 하고. json파일에 적혀있는 정보에 맞게 필드를 선언한다.
private선언을 해도 내부적 기술(reflection)로 접근하여 해당 필드에 맞게 객체로
변환하며 이때 반드시 클래스 내부에 게터나 세터메서드 둘 중 하나는 선언되어 있어야한다