sitelink1 | |
---|---|
sitelink2 | |
sitelink3 | |
extra_vars4 | |
extra_vars5 | |
extra_vars6 |
"com.fasterxml.jackson" 과 "com.googlecode.json-simple" 라이브러리는 json data 를 다루는 유틸 라이브러리이다.
jackson 에는 JsonNode 가 있고 json-simple 에는 JSONObject 가 있다.
처음에는 JSONObject 를 주로 사용해서 json data 를 처리 했었는데
얼마전부터 JsonNode 를 사용하게 되었다.
JsonNode 를 사용하게 된 이유는 JsonNode 의 get() 함수가 method chaining 방식으로 JsonNode 를 리턴하기 때문에
json data 를 탐색할때 데이터 탐색시 작성이 매우 쉽고 코드 가독성이 높다. (당연히 유지보수가 쉽다)
하지만 jackson 에서 JsonNode 를 생성할때는 new 키워드로 생성 할 수가 없다.
최상위 ObjectNode 의 instance 를 다음과 같이 생성해서 JsonNode 로 형변환하여 사용하게 된다.
ObjectMapper objectMapper = new ObjectMapper();
ObjectNode rootNode = objectMapper.createObjectNode();
위와 같은 번거로움 때문에 JsonNode 의 사용이 번거로웠다.
이리저리 고민하다가 결국 나는 두가지 라이브러리를 함께 사용하는 것으로 결론 지었는데
json data 를 탐색할때는 JsonNode 로 사용하고 json object 를 이용하여 간단한 조작을 할때는 JSONObject 를 사용하게 하였다.
그리고 두 타입의 형변환은 다음과 같은 유틸성 함수를 만들어 사용하여 두가지 모두 이용하게 되었다.
/**
* JsonNode instance를 JSONObject instance로 변환
* @param jsonNode
* @return
*/
public static JSONObject jsonNodeToJSONObject(JsonNode jsonNode) {
try {
// ObjectMapper를 사용하여 JsonNode를 String으로 변환
ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(jsonNode);
// 변환된 JSON 문자열을 JSONObject로 변환
return parseJSONObject(jsonString);
} catch (Exception e) {
e.printStackTrace();
return null; // 예외 발생 시 null 반환
}
}
/**
* JSONObject instance를 JsonNode instance로 변환
* 단, json data 의 모든 parameter 의 value 는 object reference 가 아니어야 한다.
* @param jsonObject
* @return
* @throws Exception
*/
public static JsonNode jsonObjectToJsonNode(JSONObject jsonObject) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
return objectMapper.readTree(jsonObject.toString());
}
JSONObject 를 JsonNode 로 변환시의 주의점은 함수의 주석에 적혀 있다.
casting 시 내부적으로 오류가 발생하지만 오류 내용이 출력되지는 않는다.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
» | "com.fasterxml.jackson" 과 "com.googlecode.json-simple" 라이브러리에 대하여 | 황제낙엽 | 2025.02.06 | 19 |
1 | [Gemini, Jackson] JsonNode의 asText(), textValue(), toString() 함수들과 ObjectMapper.writeValueAsString() 함수 | 황제낙엽 | 2025.02.06 | 77 |