SQL Server 2016 부터 JSON 형태를 파싱하는 쿼리를 지원합니다.
Step 1 - 테이블 생성
- JSON 형태의 문자들을 넣어줄 컬럼이 있는 테이블을 하나 생성 합니다.
create table JSON_table
(
seq int identity(1,1)
,reg_date datetime
,JSON nvarchar(1000)
)
go
Step 2 - JSON 형태 데이터 넣기
- 제가 임의로 만든 JSON형태의 데이터를 1건 넣어 보겠습니다.
insert into JSON_table (reg_date,JSON) values (getdate(),
'{"UserLevel":1,"Item":[{"id":20030,"type":2,"count":2},{"id":20024,"type":3,"count":4}],"Money":{"Type":1,"value":1000},"Change":2}')
- 아래와 같이 JSON 이라는 컬럼에 정상으로 들어가 있습니다.
Step 3 - 파싱
- 파싱 쿼리는 간단합니다. 다음과 같이 원하는 곳을 지정해 주면 됩니다.
* 여기서 JSON 명렁어를 치고, UserLevel과 같은 이름을 정의할때 대소문자를 구분해줘야 합니다.
select seq
,reg_date
,JSON_VALUE(JSON,'$.UserLevel') as UserLevel
from JSON_table
- 아래와 같은 결과를 받을 수 있습니다.
- 다음과 같이 JSON에서 해당 부분을 불러왔습니다.
여기서 가장 바깥 쪽에 { } 는 저런식으로 얼마든지 뽑을 수 있습니다. 마찬가지로 Change도 뽑을 수 있습니다.
하지만, [ ] 에 존재하는{ } 는 다른 형태로 파싱해야 합니다. 다음과 같은 형태로 할 수 있습니다. (용어를 잘 몰라서 기호로 써놨습니다.)
Step 4
- 이부분은 지정만 해주면 간단합니다.
select seq
,reg_date
,JSON_VALUE(JSON,'$.UserLevel') as UserLevel
,JSON_VALUE(JSON,'$.Item[1].id') as Item_id
from JSON_table
- 다음과 같은 JSON에서 해당 부분을 불러왔습니다.
이 부분을 다음과 같이 그림으로 보면 좀 편할거 같습니다.
감사합니다.