Перейти к содержимому
Последнее обновление

JSON_EACH_TEXT_OUTER

Описание​

Табличная функция json_each_text_outer разворачивает JSON-объект верхнего уровня в набор пар ключ/значение. Каждая строка содержит один ключ (key) и соответствующее ему значение (value). В отличие от json_each_outer, здесь столбец value имеет тип TEXT, поэтому строковые значения возвращаются без кавычек JSON.

В отличие от json_each_text, при входном значении NULL или пустом объекте json_each_text_outer возвращает одну строку NULL, NULL вместо 0 строк.

Необходимо использовать с LATERAL VIEW.

Синтаксис​

JSON_EACH_TEXT_OUTER(<json_str>)

Параметры​

ПараметрОписание
<json_str>JSON-строка для разворачивания. Содержимое должно быть JSON-объектом.

Возвращаемое значение​

Возвращает данные в нескольких столбцах и строках. Каждая строка соответствует одной паре ключ/значение в JSON-объекте:

СтолбецТипОписание
keyTEXTИмя ключа из JSON-объекта
valueTEXTСоответствующее значение в виде обычного текста (строковые значения без кавычек, например foo)

Особые случаи:

  • Если <json_str> равен NULL, возвращается 1 строка NULL, NULL
  • Если <json_str> — пустой объект ({}), возвращается 1 строка NULL, NULL
  • Значение JSON null возвращается как SQL NULL

Примеры​

Базовое использование: разворачивание JSON-объекта со строковыми значениями

SELECT k, v
FROM (SELECT 1) dummy
LATERAL VIEW json_each_text_outer('{"a":"foo","b":"bar"}') t AS k, v;
+---+-----+
| k | v |
+---+-----+
| a | foo |
| b | bar |
+---+-----+

Столбец value имеет тип TEXT, поэтому строковые значения возвращаются без кавычек JSON (в отличие от json_each_outer).

Параметр NULL: возвращается 1 строка со значениями NULL

SELECT k, v
FROM (SELECT 1) dummy
LATERAL VIEW json_each_text_outer(NULL) t AS k, v;
+------+------+
| k | v |
+------+------+
| NULL | NULL |
+------+------+

Пустой объект: возвращается 1 строка со значениями NULL

SELECT k, v
FROM (SELECT 1) dummy
LATERAL VIEW json_each_text_outer('{}') t AS k, v;
+------+------+
| k | v |
+------+------+
| NULL | NULL |
+------+------+