최종 수정: 에
JSON_OBJECT
설명
지정된 키-값 쌍을 포함하는 JSON 객체 하나를 생성합니다. 키 값이 NULL이거나 전달된 매개변수의 개수가 홀수이면 오류를 반환합니다.
구문
JSON_OBJECT (<key>, <value>[, <key>, <value>, ...])
JSON_OBJECT(*)
매개변수
가변 매개변수:
-
<key>: String 타입 -
<value>: 여러 타입을 지원하며, Doris는 JSON 타입이 아닌 매개변수를TO_JSON함수를 통해 JSON 타입으로 자동 변환합니다. -
*: 별표(와일드카드)로 호출하면 속성 이름을 키로, 해당 값을 값으로 사용하여 지정된 데이터로 OBJECT 값을 구성합니다.함수에 와일드카드를 전달할 때 테이블 이름이나 별칭으로 와일드카드를 한정할 수 있습니다. 예를 들어 mytable이라는 테이블의 모든 열을 전달하려면 다음과 같이 지정합니다:
(mytable.*)
참고 사항
- 매개변수의 개수는 짝수여야 하며, 0개일 수도 있습니다(빈 JSON 객체를 반환합니다).
- 관례에 따라 매개변수 목록은 키와 값이 번갈아 나오는 형태로 구성됩니다.
- 키는 JSON 정의에 따라 텍스트로 강제 변환됩니다.
- 전달된 키가 NULL이면 예외 오류를 반환합니다.
- 값 매개변수는 JSON으로 변환 가능한 방식으로 변환되며,
TO_JSON에서 지원하는 타입이어야 합니다. - 전달된 값이 NULL이면 반환되는 JSON 객체에서 해당 키-값 쌍의 값은 JSON null 값이 됩니다.
- 다른 타입을 값으로 사용하려면 CAST를 사용하여 JSON/String으로 변환할 수 있습니다.
- Doris는 현재 JSON 객체의 중복을 제거하지 않으므로 중복 키가 허용됩니다. 다만 중복 키는 예상치 못한 결과를 초래할 수 있습니다:
- 다른 시스템에서 중복 키에 해당하는 값을 버리거나 오류를 보고할 수 있습니다.
JSON_EXTRACT가 반환하는 결과는 불확실합니다.
반환값
JSON: 매개변수 목록으로 구성된 JSON 객체를 반환합니다.
예제
-
매개변수가 없는 경우
select json_object();+---------------+
| json_object() |
+---------------+
| {} |
+---------------+ -
지원되지 않는 값 타입
select json_object('time',curtime());ERROR 1105 (HY000): errCode = 2, detailMessage = Can not find the compatibility function signature: to_json(TIMEV2(0))cast를 통해 String으로 변환할 수 있습니다
select json_object('time', cast(curtime() as string));+------------------------------------------------+
| json_object('time', cast(curtime() as string)) |
+------------------------------------------------+
| {"time":"17:09:42"} |
+------------------------------------------------+ -
String 타입이 아닌 키는 String으로 변환됩니다
SELECT json_object(123, 456);+-----------------------+
| json_object(123, 456) |
+-----------------------+
| {"123":456} |
+-----------------------+ -
Null은 키로 사용할 수 없습니다
select json_object(null, 456);ERROR 1105 (HY000): errCode = 2, detailMessage = json_object key can't be NULL: json_object(NULL, 456)Null은 값으로 사용할 수 있습니다
select json_object('key', null);+--------------------------+
| json_object('key', null) |
+--------------------------+
| {"key":null} |
+--------------------------+ -
JSON 문자열은
JSON_PARSE를 통해 JSON 객체로 파싱한 후JSON_OBJECT에 전달할 수 있습니다select json_object(123, json_parse('{"key": "value"}'));+--------------------------------------------------+
| json_object(123, json_parse('{"key": "value"}')) |
+--------------------------------------------------+
| {"123":{"key":"value"}} |
+--------------------------------------------------+그렇지 않으면 문자열로 처리됩니다
select json_object(123,'{"key": "value"}');+-------------------------------------+
| json_object(123,'{"key": "value"}') |
+-------------------------------------+
| {"123":"{\"key\": \"value\"}"} |
+-------------------------------------+ -
TO_JSON에서 지원하지 않는 타입select json_object('key', map('abc', 'efg'));ERROR 1105 (HY000): errCode = 2, detailMessage = Can not find the compatibility function signature: to_json(MAP<VARCHAR(3),VARCHAR(3)>)전달하기 전에 CAST 문을 통해 JSON으로 변환할 수 있습니다:
select json_object('key', cast(map('abc', 'efg') as json));+-----------------------------------------------------+
| json_object('key', cast(map('abc', 'efg') as json)) |
+-----------------------------------------------------+
| {"key":{"abc":"efg"}} |
+-----------------------------------------------------+ -
중복 키가 있는 경우
select
json_object('key', 123, 'key', 4556) v1
, jsonb_extract(json_object('key', 123, 'key', 4556), '$.key') v2
, jsonb_extract(json_object('key', 123, 'key', 4556), '$.*') v3;+------------------------+------+------------+
| v1 | v2 | v3 |
+------------------------+------+------------+
| {"key":123,"key":4556} | 123 | [123,4556] |
+------------------------+------+------------+