본문 바로가기
IT/Java

[Jackson] JsonNode, ObjectNode, ArrayNode

by 성준하이 2023. 6. 6.
반응형

이전 포스팅에서 jackson annotation에 대해서 다룬적이 있다.

자세한 내용은 아래 참고 포스팅을 참고 바란다.

 

자바 개발을 하다보면, 좀더 정확히 말하면 restapi를 사용하다보면 json 사용이 빈번하고 그러면서

jackson annotation을 주로 사용하게 된다.

 

이번 포스팅에서는 주로 사용되는 jackson 라이브러리에서 제공하는 객체인 

JsonNode / ObjectNode / ArrayNode 에 대해서 다뤄볼 것이다.

 

먼저 각 노드를 생성하는 법에 대해서 다루면

ObjectMapper om = new ObjectMapper();   // JSON을 읽기, 쓰기, 변환 기능을 제공하는 객체


ObjectNode objectNode = om.createObjectNode();   // 빈 ObjectNode 생성
ArrayNode arrayNode = om.createArrayNode();   // 빈 ArrayNode 생성

이렇게 생성을 시킨다.

참고로 JsonNode는 값을 추가할 수 없는 불변의 객체이므로 빈 객체를 생성할 필요 없다.

 

JsonNode

path()나 get()을 이용해 key값을 이용해 value 값을 가져올 수 있다.

참고로 get은 해당 값이 존재하지 않을 경우 null을 가져오므로 보통은 path를 자주 사용한다.

path()의 경우 null 대신 MissingNode를 반환한다.

// json = {"id":"test", "name":"nameTest"}
public void JsonTest (JsonNode json) {
    JsonNode temp = json;
    String name = temp.path("name").asText();
    System.out.println(name);
}

path(), get()을 통해 key 값을 이용한 value 가져오고

asText(), asInt() 등의 메소드를 통해 형변환 가능하다

 

ObjectNode

마찬가지로 path()나 get()을 이용해  key 값을 가져올 수 있다.

JsonNode에서는 지원하지 않는 put()을 통해 값을 추가/변경이 가능하다.

// json은 상동
public void JsonTest (JsonNode json) {
    ObjectNode temp = (ObjectNode) json;
    temp.put("name","test");
    String name = temp.path("name").asText();
    System.out.println(name);
}

put()을 이용한 값 추가 가능하다.

 

ArrayNode
// json은 상동
public void JsonTest (JsonNode json) {
    ArrayNode arrayNode = om.createArrayNode();
    arrayNode.add("name");
    arrayNode.add("JavaTest");
    
    ObjectNode temp = (ObjectNode) json;
    temp.put("study", arrayNode);
    
    System.out.println(temp.toString());
    
    arrayNode.remove("Spring");
    System.out.println(temp.toString());
}

add()를 이용해 값 추가를 하고 

remove()를 이용한 값 제거한다.

 

셋의 차이를 간단하게 정리하면 아래와 같다.

  값 변경 가능 여부 형태
JsonNode 불가능 {key:value}
ObjectNode 가능 {key:value}
ArrayNode 가능 [value1, value2, value3]

참고 포스팅

https://thenicesj.tistory.com/303

 

jackson annotation 관련

자바에서 , 특히 dto 에서 많이 사용하는 jackson 관련 annotation을 소개하려고 한다. dto 에 대한 정의는 아래 참고 포스팅을 확인해보는것을 추천한다. @JsonProperty 는 json을 받는 쪽에서 이름을 지정하

thenicesj.tistory.com

 

반응형

'IT > Java' 카테고리의 다른 글

Java 에서의 정규 표현식  (38) 2023.06.14
자바에서 Null 체크 관련(if)  (44) 2023.06.09
kafka 실습 (springboot에서 활용)  (31) 2023.06.05
custom annotation 활용  (51) 2023.06.02
SPRINGBOOT 에서 등록된 Bean 추출  (54) 2023.06.01

댓글