본문 바로가기
MySQL

MySQL JSON 데이터 사용하기 (JSON_TABLE, JSON_OBJECT, JSON_ARRAY)

by parkjp 2023. 12. 15.

서론

 

안녕하세요,

오늘은 MySQL에서 지원하는 JSON 관련 함수들 중 JSON_TABLE, JSON_OBJECT, JSON_ARRAY에 대해 알아보도록하겠습니다.

 

이들 중에서 JSON_TABLE은 MySQL 8.0 버전 이상에서만 지원합니다.

반응형

JSON_TABLE

JSON_TABLE함수는 json 형식의 데이터를 다른 테이블과 join이 가능하도록 테이블화를 시켜줍니다.

어떻게 사용하는지는 아래 예제를 한번 봐주세요.

SET @json := '[1, 2, 3]';

SELECT idx, `name`
FROM User U
INNER JOIN JSON_TABLE(@json, '$[*]' COLUMNS (idx BIGINT PATH '$')) J
ON U.idx = J.idx;

json데이터가 단순히 Array일 경우 입니다.

이번에는 Array 안에 Object가 있는 경우를 한번 봐볼까요?

 

SET @json := '[{"idx": 1}, {"idx": 2}, {"idx": 3}]';

SELECT idx, `name`
FROM User U
INNER JOIN JSON_TABLE(@json, '$[*]' COLUMNS (idx BIGINT PATH '$.idx')) J
ON U.idx = J.idx;


SET @json := '[{"idx": 1, "test": 50}, {"idx": 2, "test": 50}, {"idx": 3, "test": 50}]';

SELECT idx, test
FROM JSON_TABLE(@json, '$[*]' COLUMNS (idx BIGINT PATH '$.idx', test INT PATH '$.test'))

JsonObject가 있는 경우에는 PATH 뒤에 키값을 함께 적어주면 됩니다.

키가 여러 개면 columns에 적어주면 됩니다.

 

JSON_OBJECT

JSON_OBJECT 함수는 JsonObject 형식으로 만드는 것 입니다.

따라서 키와 값을 적어주어야 합니다.

SELECT JSON_OBJECT(
    'user_idx', idx,
    'user_name' `name`
) FROM User WHERE idx = 1;


// 결과
{"user_idx": 1, "user_name": "test"}

아주 간단하게 Json 형식으로 결과가 출력되는 것을 보실 수 있을 겁니다.

 

JSON_ARRAY

JSON_ARRAY함수는 JsonArray형식으로 만드는 것입니다.

이번에는 키가 필요없고 값만 나열해 주시면 됩니다.

SELECT JSON_ARRAY(idx,`name`) FROM User WHERE idx = 1;


// 결과
[1, "test"]

 

마무리

 

여기까지 간단하게 Json 관련 함수 중 3가지를 알아보았습니다.

MySQL 8.0에서 JSON 함수 관련 자료는 아래 공식 레퍼런스 홈페이지에서 찾아보실 수 있습니다.

https://dev.mysql.com/doc/refman/8.0/en/json-function-reference.html

 

MySQL :: MySQL 8.0 Reference Manual :: 12.17.1 JSON Function Reference

12.17.1 JSON Function Reference Table 12.22 JSON Functions Name Description Introduced Deprecated -> Return value from JSON column after evaluating path; equivalent to JSON_EXTRACT(). ->> Return value from JSON column after evaluating path and unquoting

dev.mysql.com

 

반응형