본문 바로가기
프로그래밍/Java Json Parser 활용

Jackson Java Json Parser 활용

by Flow.X 2022. 1. 19.
728x90

요즘 서버와 서버, 서버와 클라이언트 간 가장 많이 사용히고 있는 데이터 구조인 JSON Type을 다루는 Java Library중
Jackson Library 사용법이다.  

 

Json Parser를 통해 하는 가장 기본적인 일은 무엇일까?

 

아래 두개를 통해 Java로 개발할때 편함을 주기 위함이 아닐까?

- json을 파싱해 Java class 객체에 값을 집어 넣는 일 ( Json 으로 접근보다 class로 접근하면 편하겠지..)
- Java class를 Json으로 변환하는 일  ( class의 변수를 하나씩 가져와서 Json으로 만드는거보다 쉬움)

물론 Json Parser가 위의 역활만 있는건 아니다. 

 

Jackson Parser 사용을 위한 준비  (빌드툴 없이 사용)

https://github.com/FasterXML/jackson 에 내용을 살펴보면
jackson-core, jackson-annotations, jackson-databind 3개의 패키지가 필요하다.

https://mvnrepository.com/를 통해 다운로드를 받아서 VSCode (Visual Studio Code)의 
Library 폴더에 추가 시키자

maven repository 
maven download

 

VSCode 최종모습

그외 JUnit 테스트 관련, Log4J2, slf4j2 등을 추가했다

vscode(visual studio code) 최종모습

 

테스트 Json 데이터

데이터안에 또 데이터가 있고, 데이터 내에 Array 데이터도 있다. 

{
  "name": "홍길동",
  "gender": "남",
  "residence": "서울",
  "school": ["대학원 졸업", "대학 졸업", "고졸", "중졸"],
  "family":[
      {
        "name":"홍아빠",
        "relation":"부",
        "residence":"부산",
        "school": ["대학원A 졸업", "대학B 졸업"]
      },
      {
        "name":"김엄마",
        "relation":"모",
        "residence":"서울",
        "school": ["대학원1 졸업", "대학2 졸업"]
      }
  ]
}

Json 담을 Java class 정의

@JsonIgnoreProperties를 정의하지 않으면 

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException 이 발생한다.

이건 class에는 존재하나, 클래스에는 존재하지 않아서 발생한다고 한다 (다 존재하는것 같은데 .. )

@JsonIgnoreProperties(ignoreUnknown = true)
class UserInfo {
    public String name;
    public String gender;
    public String residence;
    public String[] school;
    public UserInfo[] family; 
}

Jackson을 핸들링할 objectMapper선언

public class App {
    // can use static singleton, inject: just make sure to reuse! (1)
    final ObjectMapper mapper = new ObjectMapper(); 
    private String jsonText; //Json 담을 변수 
    
    @Before //테스트 수행 되기 전 진행되어야할 코드  (2)
    public void init() {
        this.jsonText = new StringBuffer()
                .append("{")
                ...
                .append("}";
    }
    
    @Test //이걸 달아야 쓸수있다.
    public void jackson() throws Exception {
        UserInfo userInfo = new UserInfo();
        
        //json Text를 UserInfo 타입으로 변경해라 (3)
        userInfo = mapper.readValue(this.jsonText, new TypeReference<UserInfo>(){});

        //클래스에 있는 걸 다시 문자열로(4)
        String objToJson = mapper.writeValueAsString(userInfo); 

        System.out.println("bojToJson="+objToJson);

    }
}

1) ObjectMapper를 선언하고 ( 이건 전역변수로 선언하라고 하네. 재사용도 하게 )

2) @Before를 달아서 jsonText를 로드하고 

3) Json텍스트를 UserInfo로 변경 ( readValue)

4) 담겨진 UserInfo를 다시 스트링으로 변경 (writeValueAsString)

 

결과

UserInfo에 정상적으로 배치되어 있다. DEBUG CONSOLE에서 확인 가능하다 

728x90

'프로그래밍 > Java Json Parser 활용' 카테고리의 다른 글

FastJson Java Parser 사용해보기  (0) 2022.01.20