Rst

[Jackson] JsonNode를 이용한 json 읽기, 쓰기

/Java
  1. JsonNode소개 및 생성하기
  2. JsonNode 수정하기
  3. JsonNode to Object, Collection
  4. JsonNode에서 Json문자열로

1. JsonNode소개 및 생성하기

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"}

2. JsonNode 수정하기

JsonNode자체는 수정을 지원하지않는다. 따라서 서브 클래스중 하나인 ObjectNode를 이용해 수정할 수 있다.
ObjectNode 문서

JsonNode jsonNode = ......;
((ObjectNode)jsonNode).put("grade", "3");

3. JsonNode to Object, Collection

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객체

4. JsonNode에서 Json문자열로

JsonNode:toString()혹은 JsonNode:toPrettyString()을 사용하면된다.
두가지 방법의 차이점은 후자가 보기 편한 형태의 문자열로 만들어준다는것.

comments powered by Disqus