반응형
JsonPath는?
XML 진영에 node를 컨트롤하기 위한 XPath가 있다. Json 진영에는 비슷한 개념의 json-path가 있다. json node들에 대한 컨트롤이 가능한 라이브러리이다.
JsonPath 기초
라이브러리 import
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.7.0</version>
</dependency>
API
Class | Method | Desc |
JsonPath | compile(...) | JsonPath를 생성하는 static 메서드 |
parse(...) | DocumentContext를 생성하는 static 메서드 | |
read(...) | 내부적으로 parse()를 호출하는 메서드 | |
DocumentContext | - | ReadContext와 WriteContext를 상속받은 인터페이스 JsonContext가 구현체이다. |
JsonContext | read(...) | jsonPath를 받아서 지정된 형식으로 리턴 |
renameKey(...) | key 이름 변경 | |
set(...) | value 변경 | |
add(...) | 추가 | |
put(...) | 변경 | |
delete(...) | 삭제 | |
json() | Object로 변환 | |
jsonString() | String으로 변환 |
Operator
Operators | 설명 |
$ | root |
@ | 필터 시작점 |
* | 와일드카드 (이하 모든 값 추출) |
.. | 이하 모든 곳에서 검색 후 값 추출 |
.<name> | 자식 값으로 이동 |
['<name>' (, '<name>')] | 자식값 여러개 추출 |
[<number> (, <number>)] | 자식값 여러개 추출 |
[start:end] | array 인덱스로 추출 |
[?(<expression>)] | 필터링을 위한 표현식 |
Filter Expression
filter expression | Desc | etc |
==, != | ||
<, <=, >, >= | ||
=~ | 정규표현식과 비교 | [?(@.name =~ /foo.*?/i)] |
in, nin | 조건이 존재 하는지 | |
subsetof, anyof, noneof | ||
size | 결과 사이즈가 조건과 같은지 | |
empty | 비었는지 |
Expression 테스트 가능한 페이지: http://jsonpath.herokuapp.com/
간단한 연산
min(), max(), avg(), stddev, length(), sum()
Config
DEFAULT_PATH_LEAF_TO_NULL : 찾거나 필터링된 값이 없어도 null값으로 유지
ALWAYS_RETURN_LIST : 항상 리스트 형식으로 리턴
SUPPRESS_EXCEPTIONS : 예외 스킵
REQUIRE_PROPERTIES : 데이터 없을시 예외 (validation 기능과 유사)
Reference
- https://github.com/json-path/JsonPath
- https://www.baeldung.com/guide-to-jayway-jsonpath
반응형
'개발 일지' 카테고리의 다른 글
OIDC 란 (0) | 2022.11.23 |
---|---|
Logstash 란 (0) | 2022.11.23 |
[외부자료] Java ClassLoader 요약 글 (0) | 2022.11.22 |
HikariCP 동작원리 (0) | 2022.11.16 |
JDBC 동작원리 (0) | 2022.11.15 |