PostgreSQL
JSON Path Language
#
Find similar titles
- 최초 작성자
Structured data
- Category
- Programming
Table of Contents
JSON Path Language #
JSON 데이터는 "키:값"의 구조로 "값"에는 또 다른 JSON 객체를 가질 수 있으므로 아래와 같이 계층화되어 있다. PostgreSQL/JSON Functions and Operators에서 살펴본 Functions and Operators를 이용하여 원하는 데이터에 접근할 수는 있지만, 더 세분된 JSON 데이터라면 더 많은 Functions and Operators를 사용해야 한다. 오늘 살펴볼 JSON Path Language는 JSON 데이터의 계층을 경로 표현 식으로 간편하게 질의하여 원하는 데이터를 처리할 수 있다.
{
"height": [
{
"d": "2019-01-02",
"h": 176
},
{
"d": "2020-01-04",
"h": 178
},
{
"d": "2020-11-30",
"h": 180
}
]
}
경로 표현식은 최상위 객체를 의미하는 $
기호로 시작한다. 그 뒤에는 하위 객체의 키를 사용하여 경로를 만들 수 있다. 예를 들어 위 JSON 구조에서 신장에 대한 데이터에 접근하기 위해 아래와 같이 경로를 만들 수 있다.
'$.height'
#reuslt : [
{"d": "2019-01-02","h": 176},
…
]
하위 객체가 배열일 경우는 아래와 같이 경로를 설정하면 된다. 신장 데이터 안의 모든 측정일 데이터를 얻을 수 있다. [] 접근 연산자에 숫자를 삽입하면 해당 인덱스의 측정일 데이터만 조회할 수도 있다.
첫번째 : '$.height[*].d'
#reuslt : [
{"d": "2019-01-02"}, {"d": "2020-01-04"}, {"d": "2020-11-30"}
]
두번째 : '$.height[0].d'
#reuslt : [
{"d": "2019-01-02"}
]
위 예제에서 height 객체는 배열 값을 가지기 때문에 height의 신장 측정 횟수를 구하고 싶을 때는 size() 메서드를 활용한다.
'$.height.size()'
#reuslt : 3
여기까지는 JSON Function 중에서 text[]을 통하여 질의하는 방법과 별다른 차이가 없어 보인다. 경로 표현식의 가장 큰 장점은 SQL 질의문 WHERE와 유사하게 조건절을 사용하여 구체적인 질의를 할 수 있다는 점이다. 경로 표현식의 조건절은 '?' 기호로 시작하며 그 뒤에 조건을 기술한다. 아래는 2020년 이후 신장측정일을 조회할 수 있는 경로 표현식이다.
'$.height[*].d ? (@ >= "2020-01-01")'
#reuslt : [
{"d": "2020-01-04"}, {"d": "2020-11-30"}
]
조건절에서 경로는 @ 변수를 사용하여 표시한다. 위 예제에서 @
는 $.height[*].d
를 의미한다. 그렇다면 신장측정일이 2020년 이후인 신장측정 값은 어떻게 접근할 수 있을까? @
가 경로 표현식을 의미한다고 했으니 경로 표현식을 한 단계 상위 경로로 표현한 다음 아래와 같이 @
의 뒤에 킷값을 기술하면 된다. 조건절은 경로 표현식의 결과 객체이기 때문에 조건절 뒤에 원하는 킷값을 기술한다.
'$.height[*] ? (@.d >= "2020-01-01").h'
#reuslt : [
{"h": 178}, {"h": 180}
]
조건은 아래와 같이 중첩하여 사용할 수 있다.
'$.height[*] ? (@.d >= "2020-01-01").h ? (@ > 179)'
#reuslt : [
{"h": 180}
]
PostgreSQL JSON Document를 참조하면 JSON Path Language에 정규식을 사용할 수도 있고 경로 표현식 관련 Operator와 Methods를 사용할 수 있다. 위 예제들 보다 훨씬 복잡한 구조의 JSON 데이터에서 구체적인 값을 쉽게 구할 수 있다.
참고 출처 #
- PostgreSQL JSON Document
- 티스토리, 불곰 [PostgreSQL] JSON type 사용하기
- 티스토리, siyoon210 SQL vs NoSQL (MySQL vs. MongoDB)
- outsider, Outsider's Dev Story PostgreSQL의 JSON 데이터 타입 오퍼레이터
Incoming Links #
Related Data Sciences (DataScience 0) #
Suggested Pages #
- 0.025 PostgreSQL/JSON Types
- 0.025 DBMS
- 0.013 MySQL
- 0.013 JSON
- 0.013 JSONB
- More suggestions...