Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

JSON 데이타 입력

Sample 테이블

Code Block
languagesql
CREATE TABLE employees (
	id integer  AUTO_INCREMENT primary key,
	name VARCHAR(200),
	profile JSON
);


문자열로 JSON 만들어서 입력

...

Code Block
insert into employees(name, profile) values('김갑수', '[35, "man", "인사"]');


JSON_ 함수 사용

문자열로 JSON 을 입력할 경우 실수할 여지가 많으므로 MySQL 이 제공하는 JSON 관련 함수를 사용하여 처리(https://dev.mysql.com/doc/refman/5.7/en/json-function-reference.html)


JSON_OBJECT

JSON Object 입력을 쉽게 해주는 함수로 JSON_OBJECT 함수의 파라미터로 name1, value1, name2, value2 처럼 key: value 쌍을 맞춰서 호출하며 가독성을 위해 파라미터 쌍마다 개행을 하는 것을 추천.

...

Code Block
languagesql
insert into employees(name, profile) values('신상일', json_object(
    'age', 28, 
    'gender', 'man', 
    'dept', '연구'
));


JSON_ARRAY

배열 입력시 유용. 다음은 종업원 정보중에 소지한 자격증을 배열로 입력하는 예제

Code Block
insert into employees(name, profile) values('은연수', json_object(
    'age', 29,
    'gender', 'woman',
    '부서', '개발',
    '자격증', json_array('CISA', 'PMP', 'CISSP')
    ));


JSON_QUOTE

문자열에 특수 문자가 있을 경우 처리

Code Block
SELECT JSON_QUOTE('Scott\'n tiger'), JSON_QUOTE('"null');


가져오기

Tip

Json 을 잘 처리하려면 JsonPath 기반 지식 필요


주의 사항

한글 컬럼일 경우 ' 로 전체를 묶고 한글 컬럼명을 " 로 감싸줌.(https://stackoverflow.com/questions/35735454/mysql-json-extract-path-expression-error)

...

Code Block
select id,name,json_extract(profile, '$."부서"')
 from employees where json_extract(profile, '$."부서"') = '개발';


이중 따옴표(double Quote) 없애기

아래 쿼리를 실행하면 결과가 0 이 나옴. 이유는 json_extract 가 결과에 "" 를 붙이기 때문.

...

Code Block
select id,name, profile ->> '$."부서"', json_extract(profile, '$."부서"')
 from employees where profile ->> '$."부서"' like '개%';



JSON_Extract

컬럼에서 JSON 데이타를 추출하며 JSON Path 문법을 사용.

...

Code Block
languagesql
select id, name, json_extract(profile, '$.age') from employees where json_extract(profile, '$.age') >= 35;



같이 보기

Ref