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

JSON_EACH

Описание​

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

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

Синтаксис​

JSON_EACH(<json_str>)

Параметры​

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

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

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

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

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

  • Если <json_str> равен NULL, возвращается 0 строк
  • Если <json_str> является пустым объектом ({}), возвращается 0 строк

Примеры​

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

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

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

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

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

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

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

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

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