DB

[MySQL] JSON_VALID, JSON_UNQUOTE 등 유틸 함수 총정리

인생아 2025. 7. 28. 19:47
반응형

MySQL은 JSON 데이터를 다루기 위한 검사/문자열/보조 기능을 제공하는 유틸리티 함수들을 갖추고 있다. 이 함수들은 복잡한 JSON 연산보다는 가볍게 확인하거나 보정할 때 매우 유용하다.

1. JSON_VALID: JSON 유효성 확인

JSON_VALID(json_val)
  • JSON 문자열이 정상적인 형식인지 검사
  • 1이면 유효, 0이면 무효

예제

SELECT JSON_VALID('{"name": "철수"}');
-- 결과: 1

SELECT JSON_VALID('"name": "철수"');
-- 결과: 0 (잘못된 형식)
  • INSERT 전에 JSON 형식이 맞는지 체크할 때 자주 사용됨
반응형

2. JSON_UNQUOTE: JSON 문자열 따옴표 제거

JSON_UNQUOTE(json_val)
  • JSON 문자열의 양쪽 따옴표(") 제거

예제

SELECT JSON_UNQUOTE('"철수"');
-- 결과: 철수

SELECT JSON_UNQUOTE('25');
-- 결과: 25 (숫자는 그대로)
  • JSON_EXTRACT() 결과값이 "홍길동"처럼 따옴표 포함일 때,
    문자열 처리 용도로 사용함
SELECT JSON_UNQUOTE(JSON_EXTRACT('{"name": "홍길동"}', '$.name'));
-- 결과: 홍길동

3. JSON_TYPE: 데이터 타입 확인

JSON_TYPE(json_doc[, path])
  • 대상 값의 타입을 반환 (OBJECT, ARRAY, STRING, INTEGER 등)

예제

SELECT JSON_TYPE('{"name": "철수"}', '$.name');
-- 결과: STRING

SELECT JSON_TYPE('["A", "B"]');
-- 결과: ARRAY
  • CASE WHEN 조건문에 활용 가능

4. JSON_DEPTH: JSON의 깊이 구하기

JSON_DEPTH(json_doc)
  • 중첩된 JSON 구조의 최대 깊이를 계산

예제

SELECT JSON_DEPTH('{"a": 1}');
-- 결과: 1

SELECT JSON_DEPTH('{"a": {"b": {"c": 3}}}');
-- 결과: 3
  • 구조 분석 시 유용
반응형

5. JSON_QUOTE: 문자열을 JSON 문자열로 감싸기

JSON_QUOTE(string_val)
  • 문자열을 JSON 문자열로 변환 (따옴표 추가 + 이스케이프 처리)

예제

SELECT JSON_QUOTE('철수');
-- 결과: "철수"
  • 반대 함수가 JSON_UNQUOTE

6. JSON_STORAGE_SIZE: 저장 공간 크기 확인

JSON_STORAGE_SIZE(json_doc)
  • 내부적으로 JSON이 차지하는 바이트 수 반환

예제

SELECT JSON_STORAGE_SIZE('{"name": "홍길동"}');
-- 결과: 20 (예시값)
  • 용량 제한 관리나 DB 튜닝 시 사용

7. 실무 팁: 조합 활용

SELECT 
  JSON_UNQUOTE(profile -> '$.name') AS 이름,
  JSON_TYPE(profile, '$.age') AS 나이타입,
  JSON_VALID(profile) AS 유효여부
FROM users;
  • JSON 데이터를 문자열처럼 출력하고, 타입 확인하고, 정상 여부 검사까지 한 번에 가능

참고 문서

https://dev.mysql.com/doc/refman/8.0/en/json-utility-functions.html

 

반응형