JSON

ObjectMapper 클래스

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)로 접근하여 해당 필드에 맞게 객체로
변환하며 이때 반드시 클래스 내부에 게터나 세터메서드 둘 중 하나는 선언되어 있어야한다