티스토리 뷰
개요
- Java, Kotlin은 매우 강력한 정적 타입 언어이지만 때때로 요구사항에 따라 동적으로 변화되는 객체를 다뤄야하는 상황에 직면할 때가 있다. Map
, List , JSON 문자열의 String 타입이 가장 대표적인 예인데, 이 데이터들을 읽어들이고 추가, 수정하는 것은 여간 번거로운 일이 아닐 수 없다. Jayway JsonPath
를 이용하면 Path 기반으로 굉장히 우아하고 손쉬운 방법으로 데이터를 제어할 수 있다.
build.gradle.kts
- 프로젝트 루트의 build.gradle.kts 파일에 아래 내용을 추가한다.
dependencies {
implementation("com.jayway.jsonpath:json-path:2.5.0")
}
JsonPath 객체 초기화
- 원본 소스로부터 JsonPath를 초기화할 차례이다.
// JsonPath 객체 생성
// 아규먼트에는 Map<String, Any>, List<Any>, JSON String 모두 가능
val inputJsonPath = JsonPath.parse(input)
JsonPath.parse()
는 JSON 문자열을 담은String
타입을 아규먼트로 받을 수 있다. (유효한 JSON 문자열이 아닐 경우, com.jayway.jsonpath.InvalidJsonException 예외가 발생한다.) 또한, 동적 데이터를 저장한Map<String, Any>
,List<String>
타입을 아규먼트로 받을 수 있다.
JsonPath 데이터 조회
.read()
를 이용하여 복잡한 경로의 데이터를 쉽게 조회할 수 있다.
// foo.bar 배열을 List로 반환
// Path가 존재하지 않을 경우 com.jayway.jsonpath.PathNotFoundException 예외 발생
inputJsonPath.read("$['foo']['bar']") as List<Map<String, Any>>
// foo.bar 배열의 총 개수를 반환
// Path가 존재하지 않을 경우 com.jayway.jsonpath.PathNotFoundException 예외 발생
inputJsonPath.read("$['foo']['bar'].length()") as Int
JsonPath 데이터 추가/수정
.put()
을 이용하여 데이터의 추가/수정을,set()
을 이용하여 데이터 수정이 가능하다.
// 루트의 foo.bar = foobar로 수정, 없으면 새로 생성
inputJsonPath.put("$['foo']", "bar", "foobar")
// foo.bar = foobar로 수정, 없으면 무시
inputJsonPath.set("$['foo']['bar']", "foobar")
.put()
은 Path가 존재하지 않을 경우 무시한다. Key가 존재하지 않으면 새로 생성하고, 존재하면 기존의 값을 덮어쓰기한다..set()
은 Path가 존재하지 않을 경우 무시한다. (부모 Path가 존재하지 않으면 com.jayway.jsonpath.PathNotFoundException 예외가 발생한다.) 즉, Key가 존재해야만 기존의 값을 덮어쓰기한다.
JsonPath 결과 데이터 획득
.json()
,.jsonString()
을 이용하여 결과 데이터를 획득할 수 있다.
// 결과물을 Map으로 생성
val outputMap = inputJsonPath.json() as Map<String, Any>
// 결과물을 JSON String으로 생성
val outputJsonString = inputJsonPath.jsonString()
- 최종 결과물에 대해
.json()
은Map<String, Any>
또는List<String>
으로 타입 변환이 가능하다. - 최종 결과물에 대해
.jsonString()
은 JSON 문자열을 담은String
타입을 반환한다.
참고 글
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Tomcat
- DynamoDB
- MySQL
- JavaScript
- maven
- Spring Boot
- Kendo UI Web Grid
- CentOS
- Docker
- 자전거
- JHipster
- 로드바이크
- 알뜰폰
- Kendo UI
- java
- 평속
- kotlin
- chrome
- Spring MVC 3
- node.js
- 구동계
- jsp
- 태그를 입력해 주세요.
- jpa
- jstl
- graylog
- Eclipse
- spring
- 로드 바이크
- bootstrap
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함