Database/MSSQL Server

SQL Server 2016 - JSON parser

데이터엔지니어 주형권 2017. 6. 1. 18:01
반응형

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에서 해당 부분을 불러왔습니다.



이 부분을 다음과 같이 그림으로 보면 좀 편할거 같습니다.


감사합니다.



반응형