
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/
Jayway JsonPath evaluator
Goessner examle Twitter API Webapp 20k { "store": { "book": [ { "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95 }, { "category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.
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 |