티스토리 뷰
개요
- 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
- bootstrap
- graylog
- chrome
- node.js
- Tomcat
- Eclipse
- maven
- kotlin
- java
- 태그를 입력해 주세요.
- DynamoDB
- jstl
- Spring Boot
- 평속
- CentOS
- 구동계
- Spring MVC 3
- Kendo UI Web Grid
- JavaScript
- 자전거
- 로드바이크
- 알뜰폰
- MySQL
- Kendo UI
- 로드 바이크
- Docker
- jpa
- spring
- jsp
- JHipster
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
글 보관함
