Jackson 문서에 따르면 json tree구조를 가진 객체라고 한다.
즉 json문서의 전체 혹은 일부를 나타낼 수 있는 객체이다.
이 클래스의 서브 클래스들이 있는데 JsonNode의 역할을 세분화한 버전이라고 생각하면 된다. com.fasterxml.jackson.databind.node
패키지에서 확인 할 수 있다.
json 문자열로 생성하기
String json = "{\"property1\":\"value1\", \"property2\":\"value2\", \"property3\":\"value3\",}";
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(json);
//다양한 파라미터 타입에 대한 readTree 메소드가 존재한다.
빈 객체 생성하기
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.createObjectNode();
Object to JsonNode
Student student = new Student();//String name, int grade 필드를 가진 객체라 가정
student.setName("김원빈");
student.setGrade(2);
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.valueToTree(student);
//{"name":"김원빈", "grade":"2"}
JsonNode자체는 수정을 지원하지않는다. 따라서 서브 클래스중 하나인 ObjectNode
를 이용해 수정할 수 있다.
ObjectNode 문서
JsonNode jsonNode = ......;
((ObjectNode)jsonNode).put("grade", "3");
JsonNode to Object
ObjectMapper:treeToValue(TreeNode, Class<T>)
를 사용한다.
ObjectMapper mapper = new ObjectMapper();
Student student = mapper.treeToValue(jsonNode, Student.class);
JsonNode to Collection
ObjectReader를 생성하여 사용한다.
ObjectMapper mapper = new ObjectMapper();
//Class<T>나 JavaType을 파라미터로 받는 메소드도 있음
ObjectReader reader = mapper.readerFor(new TypeReference<List<String>>(){});
List<String> value = reader.readValue(jsonNode);//jsonNode는 JsonNode객체
JsonNode:toString()
혹은 JsonNode:toPrettyString()
을 사용하면된다.
두가지 방법의 차이점은 후자가 보기 편한 형태의 문자열로 만들어준다는것.