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

JSON_EACH_TEXT

Описание​

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

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

Синтаксис​

JSON_EACH_TEXT(<json_str>)

Параметры​

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

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

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

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

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

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

Примеры​

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

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

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

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

SELECT k, v
FROM (SELECT 1) dummy
LATERAL VIEW json_each_text('{"str":"hello","num":42,"bool":true,"null_val":null}') t AS k, v;
+----------+-------+
| k | v |
+----------+-------+
| str | hello |
| num | 42 |
| bool | true |
| null_val | NULL |
+----------+-------+

Значения JSON null преобразуются в SQL NULL.

Параметр NULL: возвращает 0 строк

SELECT k, v
FROM (SELECT 1) dummy
LATERAL VIEW json_each_text(NULL) t AS k, v;
-- Empty set

Пустой объект: возвращает 0 строк

SELECT k, v
FROM (SELECT 1) dummy
LATERAL VIEW json_each_text('{}') t AS k, v;
-- Empty set