반응형
MySQL에서는 JSON 데이터를 동적으로 만들기 위해 JSON_OBJECT()와 JSON_ARRAY() 함수를 사용할 수 있다. 이 두 함수는 테이블 내 값을 기반으로 동적으로 JSON을 생성하거나, API 응답 형태로 데이터를 구성할 때 매우 유용하다.

1. JSON_OBJECT 함수란?
JSON_OBJECT(key1, value1, key2, value2, ...)
- key와 value를 쌍으로 입력하여 JSON 객체 생성
- key는 문자열, value는 문자열, 숫자, 불리언 등 다양한 타입 가능
예제
SELECT JSON_OBJECT('name', '노트북', 'price', 1200000);
-- 결과: {"name": "노트북", "price": 1200000}
테이블 컬럼 기반 생성
SELECT JSON_OBJECT('id', id, 'title', title)
FROM posts
WHERE id = 1;
- 컬럼 값을 기반으로 동적으로 JSON 생성 가능
- API 응답으로 넘기기 유용
NULL 포함 시 주의
- 값이 NULL이면 자동으로 "key": null 생성
- key가 NULL이면 에러 발생
SELECT JSON_OBJECT(NULL, 'test');
-- 결과: NULL + Warning
반응형
2. JSON_ARRAY 함수란?
JSON_ARRAY(value1, value2, ...)
- 값만 나열하여 배열(JSON Array) 생성
예제
SELECT JSON_ARRAY('apple', 'banana', 'cherry');
-- 결과: ["apple", "banana", "cherry"]
숫자, 불리언도 포함 가능
SELECT JSON_ARRAY(1, 3.14, TRUE, NULL);
-- 결과: [1, 3.14, true, null]
3. JSON_OBJECT + JSON_ARRAY 조합
복잡한 구조의 JSON도 손쉽게 생성할 수 있다.
SELECT JSON_OBJECT(
'id', 101,
'tags', JSON_ARRAY('mysql', 'json', '함수')
);
-- 결과: {"id": 101, "tags": ["mysql", "json", "함수"]}
4. 실무 예제: 게시글을 JSON 응답으로 만들기
SELECT
JSON_OBJECT(
'id', id,
'title', title,
'tags', JSON_ARRAY('DB', 'SQL', 'MySQL')
) AS json_response
FROM posts
WHERE id = 5;
- API 응답용 JSON 문자열을 DB에서 직접 생성
- 애플리케이션에서 추가 가공 없이 바로 사용 가능
반응형
5. 배열을 그룹으로 묶어보기 (GROUP_CONCAT 응용)
SELECT
user_id,
JSON_ARRAYAGG(tag) AS tag_list
FROM user_tags
GROUP BY user_id;
- JSON_ARRAYAGG()는 여러 행을 배열로 묶을 때 사용
- GROUP_CONCAT()보다 JSON 구조를 보장
6. JSON_OBJECT 사용 시 주의사항
| 항목 | 설명 |
| Key 중복 | 동일 key 사용 시 가장 마지막 값이 반영됨 |
| Key NULL 불가 | key에 NULL 들어가면 전체 결과 NULL 반환 |
| 성능 이슈 | SELECT 내 다수 호출 시 성능 유의 |
7. JSON 응답 구조 정리
{
"user": {
"id": 1001,
"name": "홍길동"
},
"roles": ["admin", "editor"]
}
이런 형태는 아래처럼 작성 가능:
SELECT JSON_OBJECT(
'user', JSON_OBJECT('id', 1001, 'name', '홍길동'),
'roles', JSON_ARRAY('admin', 'editor')
);
참고 문서
https://dev.mysql.com/doc/refman/8.0/en/json-creation-functions.html
반응형
'DB' 카테고리의 다른 글
| [MySQL] JSON_MERGE, JSON_ARRAY_APPEND 활용법 (2) | 2025.07.28 |
|---|---|
| [MySQL] JSON_CONTAINS, JSON_LENGTH 등 검사 함수 모음 (1) | 2025.07.28 |
| [MySQL] JSON_SET, JSON_REPLACE로 값 수정하기 (1) | 2025.07.28 |
| [MySQL] JSON_EXTRACT와 -> 연산자로 값 조회하기 (2) | 2025.07.28 |
| [MySQL] JSON 데이터 타입과 기본 구조 이해하기 (1) | 2025.07.28 |
| [MySQL] 암호화와 해시 함수 선택 가이드 (1) | 2025.07.28 |
| [MySQL] COMPRESS와 UNCOMPRESS로 데이터 압축 처리하기 (1) | 2025.07.28 |
| [MySQL] ENCODE와 DECODE 함수 사용법 🔐 (1) | 2025.07.28 |