데이터엔지니어 군고구마
  • SQL Server 2016 - JSON parser
    2017년 06월 01일 18시 01분 50초에 업로드 된 글입니다.
    작성자: DE 군고구마
    반응형

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



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


    감사합니다.



    반응형
    댓글