개발 일지

JsonPath란

북극곰은콜라 2022. 11. 22. 17:45
반응형


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