요즘 서버와 서버, 서버와 클라이언트 간 가장 많이 사용히고 있는 데이터 구조인 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 폴더에 추가 시키자
VSCode 최종모습
그외 JUnit 테스트 관련, Log4J2, slf4j2 등을 추가했다
테스트 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에서 확인 가능하다
'프로그래밍 > Java Json Parser 활용' 카테고리의 다른 글
FastJson Java Parser 사용해보기 (0) | 2022.01.20 |
---|