Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Функции JSON

Типы JSON-функций

Существует два набора функций для разбора JSON:

  • simpleJSON* (visitParam*) — для чрезвычайно быстрого разбора ограниченного подмножества JSON.
  • JSONExtract* — для разбора обычного JSON.

Функции simpleJSON (visitParam)

В ClickHouse есть специальные функции для работы с упрощённым JSON. Все эти JSON-функции основаны на строгих допущениях относительно того, каким может быть JSON. Они стараются делать как можно меньше, чтобы выполнить задачу как можно быстрее.

Предполагается следующее:

  1. Имя поля (аргумент функции) должно быть константой.
  2. Имя поля в JSON должно быть закодировано в канонической форме. Например: simpleJSONHas('{"abc":"def"}', 'abc') = 1, но simpleJSONHas('{"\\u0061\\u0062\\u0063":"def"}', 'abc') = 0
  3. Поля ищутся на любом уровне вложенности без учёта контекста. Если есть несколько совпадающих полей, используется первое вхождение.
  4. В JSON не должно быть пробельных символов вне строковых литералов.

Функции JSONExtract

Эти функции основаны на simdjson и предназначены для более сложных сценариев парсинга JSON.

Регистронезависимые функции JSONExtract

Эти функции выполняют регистронезависимое сопоставление ASCII-ключей при извлечении значений из объектов JSON. Они работают так же, как и их регистрозависимые аналоги, за исключением того, что ключи объектов сопоставляются без учета регистра. Если нескольким ключам с разным регистром соответствует совпадение, возвращается первое из них.

Синтаксис JSONPath

Функции JSON_EXISTS, JSON_VALUE и JSON_QUERY принимают выражение JSONPath в качестве второго аргумента. ClickHouse реализует небольшое подмножество JSONPath, в общих чертах основанное на стандарте SQL/JSON (ISO/IEC TR 19075-6) и намеренно более ограниченное, чем RFC 9535 и другие популярные реализации. Поддерживаемые операторы перечислены ниже.

Эталонная реализация находится в src/Functions/JSONPath/Parsers.

Поддерживаемые операторы

Синтаксис Описание Пример
$ Корневой элемент. Каждый путь должен начинаться с него. $
.key Доступ к элементу через точечную нотацию без кавычек. Ключ может начинаться с цифры или состоять только из цифр. $.store.book, $.1key, $.123
."key" Доступ к элементу через точечную нотацию в кавычках. Используйте для ключей, содержащих пробелы или специальные символы. Допускаются двойные или обратные кавычки. $."foo bar"
[key] Доступ к элементу через скобочную нотацию без кавычек. $[hello]
['key'] Доступ к элементу через скобочную нотацию в кавычках. Допускаются одинарные, двойные или обратные кавычки. $['foo bar']
[n] Доступ к элементу массива по индексу (отсчёт с 0). $.items[0]
[n, m, ...] Доступ к нескольким элементам массива. $.items[0, 2, 4]
[n to m] Диапазон элементов массива. Конечный индекс m не включается. $.items[0 to 3]
[*] Подстановочный знак, соответствующий всем элементам массива. $.items[*]

Примечания:

  • Индексы и диапазоны можно комбинировать в одной паре скобок (например, [0 to 2, 4]).
  • Диапазоны индексов и подстановочный знак нельзя комбинировать в одной паре скобок (например, [* , 0] недопустимо).
  • В диапазоне [n to m] начальный индекс n должен быть строго меньше конечного индекса m, иначе возникает исключение.
  • Одиночный индекс [n] эквивалентен диапазону [n to n+1].

Неподдерживаемые операторы

Следующие операторы JSONPath, доступные в RFC 9535 или других реализациях, не поддерживаются ClickHouse:

Синтаксис Описание
.. Рекурсивный спуск.
?(@.expr) Выражения фильтрации.
[start:end:step] Нотация среза. Вместо неё используйте [n to m].
@ Ссылка на текущий узел.
[-n] Отрицательные индексы массива (с конца).
Скриптовые выражения Арифметические выражения или вызовы функций внутри пути.
ON ERROR / ON EMPTY Стандартные секции SQL/JSON для управления ошибками и пустыми результатами.

JSONAllPaths

Добавленный в: v24.8.0

Возвращает список всех путей, хранящихся в каждой строке JSON-столбца.

Синтаксис

JSONAllPaths(json)

Аргументы

  • json — JSON-столбец. JSON

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

Возвращает массив всех путей в JSON-столбце. Array(String)

Примеры

Пример использования

CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory;
INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}};
SELECT json, JSONAllPaths(json) FROM test;
┌─json───────────────────────────┬─JSONAllPaths(json)─┐
│ {"a":42}                       │ ['a']              │
│ {"b":"Hello"}                  │ ['b']              │
│ {"a":[1,2,3],"c":"2020-01-01"} │ ['a','c']          │
└────────────────────────────────┴────────────────────┘

JSONAllPathsWithTypes

Добавленный в: v24.8.0

Возвращает список всех путей и соответствующих им типов данных, хранящихся в каждой строке JSON-столбца.

Синтаксис

JSONAllPathsWithTypes(json)

Аргументы

  • json — JSON-столбец. JSON

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

Возвращает карту всех путей и их типов данных в JSON-столбце. Map(String, String)

Примеры

Пример использования

CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory;
INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}};
SELECT json, JSONAllPathsWithTypes(json) FROM test;
┌─json───────────────────────────┬─JSONAllPathsWithTypes(json)───────────────┐
│ {"a":42}                       │ {'a':'Int64'}                             │
│ {"b":"Hello"}                  │ {'b':'String'}                            │
│ {"a":[1,2,3],"c":"2020-01-01"} │ {'a':'Array(Nullable(Int64))','c':'Date'} │
└────────────────────────────────┴───────────────────────────────────────────┘

JSONAllValues

Добавленный в: v26.4.0

Возвращает все значения из каждой строки JSON-столбца в виде массива строк. Значения сериализуются в текстовом представлении и упорядочиваются по именам путей.

Синтаксис

JSONAllValues(json)

Аргументы

  • json — JSON-столбец. JSON

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

Возвращает массив всех значений JSON-столбца в виде строк. Array(String)

Примеры

Пример использования

CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory;
INSERT INTO test FORMAT JSONEachRow {"json": {"a": 42}}, {"json": {"b": "Hello"}}, {"json": {"a": [1, 2, 3], "c": "2020-01-01"}};
SELECT json, JSONAllValues(json) FROM test;
┌─json───────────────────────────┬─JSONAllValues(json)──────┐
│ {"a":42}                       │ ['42']                   │
│ {"b":"Hello"}                  │ ['Hello']                │
│ {"a":[1,2,3],"c":"2020-01-01"} │ ['[1,2,3]','2020-01-01'] │
└────────────────────────────────┴──────────────────────────┘

JSONArrayLength

Добавленный в: v23.2.0

Возвращает количество элементов в JSON-массиве верхнего уровня. Функция возвращает NULL, если входная JSON-строка недействительна.

Синтаксис

JSONArrayLength(json)

Псевдонимы: JSON_ARRAY_LENGTH

Аргументы

  • json — строка String с корректным JSON. String

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

Возвращает количество элементов массива, если json является строкой с корректным JSON-массивом; в противном случае возвращает NULL. Nullable(UInt64)

Примеры

Пример использования

SELECT
    JSONArrayLength(''),
    JSONArrayLength('[1,2,3]');
┌─JSONArrayLength('')─┬─JSONArrayLength('[1,2,3]')─┐
│                ᴺᵁᴸᴸ │                          3 │
└─────────────────────┴────────────────────────────┘

JSONDynamicPaths

Добавленный в: v24.8.0

Возвращает список динамических путей, хранящихся в JSON-столбце как отдельные подстолбцы.

Синтаксис

JSONDynamicPaths(json)

Аргументы

  • json — JSON-столбец. JSON

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

Возвращает массив динамических путей из JSON-столбца. Array(String)

Примеры

Пример использования

CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory;
INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}};
SELECT json, JSONDynamicPaths(json) FROM test;
┌─json───────────────────────────┬─JSONDynamicPaths(json)─┐
│ {"a":42}                       │ ['a']                  │
│ {"b":"Hello"}                  │ []                     │
│ {"a":[1,2,3],"c":"2020-01-01"} │ ['a']                  │
└────────────────────────────────┴────────────────────────┘

JSONDynamicPathsWithTypes

Добавленный в: v24.8.0

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

Синтаксис

JSONDynamicPathsWithTypes(json)

Аргументы

  • json — JSON-столбец. JSON

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

Возвращает карту динамических путей и их типов данных в JSON-столбце. Map(String, String)

Примеры

Пример использования

CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory;
INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}};
SELECT json, JSONDynamicPathsWithTypes(json) FROM test;
┌─json───────────────────────────┬─JSONDynamicPathsWithTypes(json)─┐
│ {"a":42}                       │ {'a':'Int64'}                   │
│ {"b":"Hello"}                  │ {}                              │
│ {"a":[1,2,3],"c":"2020-01-01"} │ {'a':'Array(Nullable(Int64))'}  │
└────────────────────────────────┴─────────────────────────────────┘

JSONExtract

Добавленный в: v19.14.0

Разбирает JSON и извлекает значение указанного типа данных ClickHouse.

Синтаксис

JSONExtract(json[, indices_or_keys, ...], return_type)

Аргументы

  • json — JSON-строка для разбора. String
  • indices_or_keys — Список из нуля или более аргументов, каждый из которых может быть либо строкой, либо целым числом. String или (U)Int*
  • return_type — Тип данных ClickHouse, который нужно вернуть. String

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

Возвращает значение указанного типа данных ClickHouse, если это возможно, в противном случае — значение по умолчанию для этого типа.

Примеры

Пример использования

SELECT JSONExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'Tuple(String, Array(Float64))') AS res;
┌─res──────────────────────┐
│ ('hello',[-100,200,300]) │
└──────────────────────────┘

JSONExtractArrayRaw

Добавленный в: v20.1.0

Возвращает массив, содержащий элементы JSON-массива, каждый из которых представлен в виде неразобранной строки.

Синтаксис

JSONExtractArrayRaw(json[, indices_or_keys, ...])

Аргументы

  • json — JSON-строка для разбора. String
  • indices_or_keys — Список из нуля или более аргументов, каждый из которых может быть строкой или целым числом. String или (U)Int*

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

Возвращает массив строк, содержащий элементы JSON-массива. Если соответствующая часть не является массивом или не существует, возвращается пустой массив. Array(String)

Примеры

Пример использования

SELECT JSONExtractArrayRaw('{"a": "hello", "b": [-100, 200.0, "hello"]}', 'b') AS res;
┌─res──────────────────────┐
│ ['-100','200','"hello"'] │
└──────────────────────────┘

JSONExtractArrayRawCaseInsensitive

Добавленный в: v25.8.0

Возвращает массив из элементов JSON-массива, каждый из которых представлен как неразобранная строка, с использованием регистронезависимого сопоставления ключей. Эта функция аналогична JSONExtractArrayRaw.

Синтаксис

JSONExtractArrayRawCaseInsensitive(json [, indices_or_keys]...)

Аргументы

  • json — JSON-строка для разбора String
  • indices_or_keys — Необязательно. Индексы или ключи для перехода к массиву. Для ключей используется регистронезависимое сравнение String или (U)Int*

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

Возвращает массив необработанных JSON-строк. Array(String)

Примеры

базовый

SELECT JSONExtractArrayRawCaseInsensitive('{"Items": [1, 2, 3]}', 'ITEMS')
['1','2','3']

JSONExtractBool

Добавленный в: v20.1.0

Разбирает JSON и извлекает значение типа Bool.

Синтаксис

JSONExtractBool(json[, indices_or_keys, ...])

Аргументы

  • json — JSON-строка для разбора. String
  • indices_or_keys — Список из нуля или более аргументов, каждый из которых может быть либо строкой, либо целым числом. String или (U)Int*

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

Возвращает значение типа Bool, если оно существует; в противном случае возвращает 0. Bool

Примеры

Пример использования

SELECT JSONExtractBool('{"passed": true}', 'passed') AS res;
┌─res─┐
│   1 │
└─────┘

JSONExtractBoolCaseInsensitive

Добавленный в: v25.8.0

Разбирает JSON и извлекает булево значение, используя регистронезависимое сопоставление ключей. Эта функция похожа на JSONExtractBool.

Синтаксис

JSONExtractBoolCaseInsensitive(json [, indices_or_keys]...)

Аргументы

  • json — JSON-строка для разбора String
  • indices_or_keys — Необязательно. Индексы или ключи для перехода к полю. Для ключей используется регистронезависимое сопоставление String или (U)Int*

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

Возвращает извлечённое логическое значение (1 для true, 0 для false), либо 0, если значение не найдено. UInt8

Примеры

базовый

SELECT JSONExtractBoolCaseInsensitive('{"IsActive": true}', 'isactive')
1

JSONExtractCaseInsensitive

Добавленный в: v25.8.0

Разбирает JSON и извлекает значение указанного типа данных ClickHouse с помощью регистронезависимого сопоставления ключей. Эта функция похожа на JSONExtract.

Синтаксис

JSONExtractCaseInsensitive(json [, indices_or_keys...], return_type)

Аргументы

  • json — JSON-строка для разбора String
  • indices_or_keys — Необязательно. Индексы или ключи для перехода к полю. Для ключей используется регистронезависимое сопоставление String или (U)Int*
  • return_type — Тип данных ClickHouse, который нужно извлечь String

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

Возвращает извлечённое значение в указанном типе данных. Any

Примеры

int_type

SELECT JSONExtractCaseInsensitive('{"Number": 123}', 'number', 'Int32')
123

array_type

SELECT JSONExtractCaseInsensitive('{"List": [1, 2, 3]}', 'list', 'Array(Int32)')
[1,2,3]

JSONExtractFloat

Добавленный в: v20.1.0

Разбирает JSON и извлекает значение типа Float.

Синтаксис

JSONExtractFloat(json[, indices_or_keys, ...])

Аргументы

  • json — JSON-строка для разбора. String
  • indices_or_keys — Список из нуля или более аргументов, каждый из которых может быть либо строкой, либо целым числом. String или (U)Int*

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

Возвращает значение типа Float, если оно существует; в противном случае — 0. Float64

Примеры

Пример использования

SELECT JSONExtractFloat('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 2) AS res;
┌─res─┐
│ 200 │
└─────┘

JSONExtractFloatCaseInsensitive

Добавленный в: v25.8.0

Разбирает JSON и извлекает значение типа Float, используя регистронезависимое сопоставление ключей. Эта функция аналогична JSONExtractFloat.

Синтаксис

JSONExtractFloatCaseInsensitive(json [, indices_or_keys]...)

Аргументы

  • json — JSON-строка для разбора String
  • indices_or_keys — Необязательно. Индексы или ключи для перехода к полю. Для ключей используется регистронезависимое сопоставление String или (U)Int*

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

Возвращает извлечённое значение типа Float; 0, если оно не найдено или не может быть преобразовано. Float64

Примеры

базовый

SELECT JSONExtractFloatCaseInsensitive('{"Price": 12.34}', 'PRICE')
12.34

JSONExtractInt

Добавленный в: v20.1.0

Разбирает JSON и извлекает значение типа Int.

Синтаксис

JSONExtractInt(json[, indices_or_keys, ...])

Аргументы

  • json — JSON-строка для разбора. String
  • indices_or_keys — Список из нуля или более аргументов, каждый из которых может быть либо строкой, либо целым числом. String или (U)Int*

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

Возвращает значение типа Int, если оно существует; в противном случае возвращает 0. Int64

Примеры

Пример использования

SELECT JSONExtractInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 1) AS res;
┌──res─┐
│ -100 │
└──────┘

JSONExtractIntCaseInsensitive

Добавленный в: v25.8.0

Разбирает JSON и извлекает значение типа Int с регистронезависимым сопоставлением ключей. Эта функция аналогична JSONExtractInt.

Синтаксис

JSONExtractIntCaseInsensitive(json [, indices_or_keys]...)

Аргументы

  • json — JSON-строка для разбора String
  • indices_or_keys — Необязательно. Индексы или ключи для перехода к полю. Для ключей используется регистронезависимое сравнение String или (U)Int*

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

Возвращает извлечённое значение типа Int; 0, если значение не найдено или его нельзя преобразовать. Int64

Примеры

базовый пример

SELECT JSONExtractIntCaseInsensitive('{"Value": 123}', 'value')
123

вложенный

SELECT JSONExtractIntCaseInsensitive('{"DATA": {"COUNT": 42}}', 'data', 'Count')
42

JSONExtractKeys

Добавленный в: v21.11.0

Разбирает строку JSON и извлекает из неё ключи.

Синтаксис

JSONExtractKeys(json[, indices_or_keys, ...])

Аргументы

  • json — JSON-строка для разбора. String
  • indices_or_keys — Список из нуля или более аргументов, каждый из которых может быть строкой или целым числом. String или (U)Int*

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

Возвращает массив ключей объекта JSON. Array(String)

Примеры

Пример использования

SELECT JSONExtractKeys('{"a": "hello", "b": [-100, 200.0, 300]}') AS res;
┌─res───────┐
│ ['a','b'] │
└───────────┘

JSONExtractKeysAndValues

Добавленный в: v20.1.0

Разбирает пары ключ-значение из JSON, где значения имеют указанный тип данных ClickHouse.

Синтаксис

JSONExtractKeysAndValues(json[, indices_or_keys, ...], value_type)

Аргументы

  • json — JSON-строка для разбора. String
  • indices_or_keys — Список из нуля или более аргументов, каждый из которых может быть строкой или целым числом. String или (U)Int*
  • value_type — Тип данных ClickHouse для значений. String

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

Возвращает массив Tuple с разобранными парами ключ-значение. Array(Tuple(String, value_type))

Примеры

Пример использования

SELECT JSONExtractKeysAndValues('{"x": {"a": 5, "b": 7, "c": 11}}', 'x', 'Int8') AS res
┌─res────────────────────────┐
│ [('a',5),('b',7),('c',11)] │
└────────────────────────────┘

JSONExtractKeysAndValuesCaseInsensitive

Добавленный в: v25.8.0

Разбирает пары «ключ-значение» из JSON, используя регистронезависимое сопоставление ключей. Эта функция похожа на JSONExtractKeysAndValues.

Синтаксис

JSONExtractKeysAndValuesCaseInsensitive(json [, indices_or_keys...], value_type)

Аргументы

  • json — JSON-строка для разбора String
  • indices_or_keys — Необязательно. Индексы или ключи для перехода к объекту. Ключи сопоставляются без учета регистра String или (U)Int*
  • value_type — Тип данных ClickHouse для значений String

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

Возвращает массив кортежей, содержащих пары ключ-значение. Array(Tuple(String, T))

Примеры

базовый

SELECT JSONExtractKeysAndValuesCaseInsensitive('{"Name": "Alice", "AGE": 30}', 'String')
[('Name','Alice'),('AGE','30')]

JSONExtractKeysAndValuesRaw

Добавленный в: v20.4.0

Возвращает массив Tuple с ключами и значениями из объекта JSON. Все значения представлены в виде необработанных строк.

Синтаксис

JSONExtractKeysAndValuesRaw(json[, indices_or_keys, ...])

Аргументы

  • json — JSON-строка для разбора. String
  • indices_or_keys — Список из нуля или более аргументов, каждый из которых может быть строкой или целым числом. String или (U)Int*

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

Возвращает массив кортежей с разобранными парами ключ-значение, где значения представлены неразобранными строками. Array(Tuple(String, String))

Примеры

Пример использования

SELECT JSONExtractKeysAndValuesRaw('{"a": [-100, 200.0], "b": "hello"}') AS res;
┌─res──────────────────────────────────┐
│ [('a','[-100,200]'),('b','"hello"')] │
└──────────────────────────────────────┘

JSONExtractKeysAndValuesRawCaseInsensitive

Добавленный в: v25.8.0

Извлекает из JSON необработанные пары ключ-значение с регистронезависимым сопоставлением ключей. Эта функция похожа на JSONExtractKeysAndValuesRaw.

Синтаксис

JSONExtractKeysAndValuesRawCaseInsensitive(json [, indices_or_keys]...)

Аргументы

  • json — JSON-строка для разбора String
  • indices_or_keys — Необязательно. Индексы или ключи для перехода к объекту. Для ключей используется регистронезависимое сравнение String или (U)Int*

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

Возвращает массив Tuple, содержащих пары ключ-значение в виде строк в исходном виде. Array(Tuple(String, String))

Примеры

простой

SELECT JSONExtractKeysAndValuesRawCaseInsensitive('{"Name": "Alice", "AGE": 30}')
[('Name','"Alice"'),('AGE','30')]

JSONExtractKeysCaseInsensitive

Добавленный в: v25.8.0

Разбирает строку JSON и извлекает ключи, используя регистронезависимое сопоставление ключей для перехода к вложенным объектам. Эта функция похожа на JSONExtractKeys.

Синтаксис

JSONExtractKeysCaseInsensitive(json [, indices_or_keys]...)

Аргументы

  • json — JSON-строка для разбора String
  • indices_or_keys — Необязательно. Индексы или ключи для перехода к объекту. Ключи используют регистронезависимое сопоставление ключей String или (U)Int*

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

Возвращает массив ключей из объекта JSON. Array(String)

Примеры

базовый

SELECT JSONExtractKeysCaseInsensitive('{"Name": "Alice", "AGE": 30}')
['Name','AGE']

вложенный

SELECT JSONExtractKeysCaseInsensitive('{"User": {"name": "John", "AGE": 25}}', 'user')
['name','AGE']

JSONExtractRaw

Добавленный в: v20.1.0

Возвращает часть JSON как неразобранную строку.

Синтаксис

JSONExtractRaw(json[, indices_or_keys, ...])

Аргументы

  • json — JSON-строка для разбора. String
  • indices_or_keys — Список из нуля или более аргументов, каждый из которых может быть либо строкой, либо целым числом. String или (U)Int*

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

Возвращает часть JSON в виде неразобранной строки. Если эта часть не существует или имеет неверный тип, возвращается пустая строка. String

Примеры

Пример использования

SELECT JSONExtractRaw('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') AS res;
┌─res────────────┐
│ [-100,200,300] │
└────────────────┘

JSONExtractRawCaseInsensitive

Добавленный в: v25.8.0

Возвращает часть JSON в виде неразобранной строки, используя регистронезависимое сопоставление ключей. Эта функция похожа на JSONExtractRaw.

Синтаксис

JSONExtractRawCaseInsensitive(json [, indices_or_keys]...)

Аргументы

  • json — JSON-строка для разбора String
  • indices_or_keys — Необязательно. Индексы или ключи для перехода к полю. Для ключей используется регистронезависимое сопоставление String или (U)Int*

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

Возвращает исходную JSON-строку извлечённого элемента. String

Примеры

объект

SELECT JSONExtractRawCaseInsensitive('{"Object": {"key": "value"}}', 'OBJECT')
{"key":"value"}

JSONExtractString

Добавленный в: v20.1.0

Разбирает JSON и извлекает значение типа String.

Синтаксис

JSONExtractString(json[, indices_or_keys, ...])

Аргументы

  • json — JSON-строка для разбора. String
  • indices_or_keys — Список из нуля или более аргументов, каждый из которых может быть либо строкой, либо целым числом. String или (U)Int*

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

Возвращает значение типа String, если оно существует; в противном случае возвращает пустую строку. String

Примеры

Пример использования

SELECT JSONExtractString('{"a": "hello", "b": [-100, 200.0, 300]}', 'a') AS res;
┌─res───┐
│ hello │
└───────┘

JSONExtractStringCaseInsensitive

Добавленный в: v25.8.0

Разбирает JSON и извлекает строку, используя регистронезависимое сопоставление ключей. Эта функция похожа на JSONExtractString.

Синтаксис

JSONExtractStringCaseInsensitive(json [, indices_or_keys]...)

Аргументы

  • json — JSON-строка для разбора String
  • indices_or_keys — Необязательно. Индексы или ключи для перехода к нужному полю. Для ключей используется регистронезависимое сопоставление String или (U)Int*

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

Возвращает извлечённое строковое значение или пустую строку, если ничего не найдено. String

Примеры

базовый

SELECT JSONExtractStringCaseInsensitive('{"ABC": "def"}', 'abc')
def

вложенный

SELECT JSONExtractStringCaseInsensitive('{"User": {"Name": "John"}}', 'user', 'name')
John

JSONExtractUInt

Добавленный в: v20.1.0

Разбирает JSON и извлекает значение типа UInt.

Синтаксис

JSONExtractUInt(json [, indices_or_keys, ...])

Аргументы

  • json — JSON-строка для разбора. String
  • indices_or_keys — Список из нуля, одного или нескольких аргументов, каждый из которых может быть строкой или целым числом. String или (U)Int*

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

Возвращает значение UInt, если оно существует; в противном случае возвращает 0. UInt64

Примеры

Пример использования

SELECT JSONExtractUInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', -1) AS res;
┌─res─┐
│ 300 │
└─────┘

JSONExtractUIntCaseInsensitive

Добавленный в: v25.8.0

Разбирает JSON и извлекает значение типа UInt, используя регистронезависимое сопоставление ключей. Эта функция похожа на JSONExtractUInt.

Синтаксис

JSONExtractUIntCaseInsensitive(json [, indices_or_keys]...)

Аргументы

  • json — JSON-строка для разбора String
  • indices_or_keys — Необязательно. Индексы или ключи для перехода к полю. Ключи используют регистронезависимое сопоставление String или (U)Int*

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

Возвращает извлечённое значение типа UInt; 0, если значение не найдено или его невозможно преобразовать. UInt64

Примеры

базовый

SELECT JSONExtractUIntCaseInsensitive('{"COUNT": 789}', 'count')
789

JSONHas

Добавленный в: v20.1.0

Проверяет наличие указанных значений в JSON-документе.

Синтаксис

JSONHas(json[ ,indices_or_keys, ...])

Аргументы

  • json — JSON-строка для разбора String
  • [ ,indices_or_keys, ...] — Список из нуля или более аргументов. String или (U)Int*

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

Возвращает 1, если значение присутствует в json, в противном случае — 0 UInt8

Примеры

Пример использования

SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 1;
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 4) = 0;
1
1

JSONKey

Добавленный в: v20.1.0

Возвращает ключ поля объекта JSON по его индексу (начиная с 1). Если JSON передан в виде строки, сначала он разбирается. Второй аргумент — путь JSON для перехода к вложенным объектам. Функция возвращает имя ключа в указанной позиции.

Синтаксис

JSONKey(json[, indices_or_keys, ...])

Аргументы

  • json — JSON-строка для разбора. String
  • indices_or_keys — Необязательный список индексов или ключей, указывающий путь к вложенному элементу. Каждый argument может быть либо строкой (доступ по ключу), либо целым числом (доступ по индексу, начиная с 1). String или Int*

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

Возвращает имя ключа в указанной позиции объекта JSON. String

Примеры

Пример использования

SELECT JSONKey('{"a": "hello", "b": [-100, 200.0, 300]}', 1);
a

JSONLength

Добавленный в: v20.1.0

Возвращает длину JSON-массива или объекта JSON. Если значение отсутствует или имеет неверный тип, возвращается 0.

Синтаксис

JSONLength(json [, indices_or_keys, ...])

Аргументы

  • json — JSON-строка для разбора String
  • [, indices_or_keys, ...] — Необязательно. Список из нуля или более аргументов. String или (U)Int8/16/32/64

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

Возвращает длину JSON-массива или объекта JSON; в противном случае возвращает 0, если значение отсутствует или имеет неверный тип. UInt64

Примеры

Пример использования

SELECT JSONLength('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 3;
SELECT JSONLength('{"a": "hello", "b": [-100, 200.0, 300]}') = 2;
1
1

JSONMergePatch

Добавленный в: v23.10.0

Возвращает строку объекта JSON, полученного путём слияния нескольких объектов JSON.

Синтаксис

JSONMergePatch(json1[, json2, ...])

Псевдонимы: jsonMergePatch

Аргументы

  • json1[, json2, ...] — Одна или несколько строк с корректным JSON. String

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

Возвращает строку с объединённым объектом JSON, если строки объектов JSON корректны. String

Примеры

Пример использования

SELECT JSONMergePatch('{"a":1}', '{"name": "joey"}', '{"name": "tom"}', '{"name": "zoey"}') AS res;
┌─res───────────────────┐
│ {"a":1,"name":"zoey"} │
└───────────────────────┘

JSONSharedDataPaths

Добавленный в: v24.8.0

Возвращает список путей, хранящихся в общей структуре данных JSON-столбца.

Синтаксис

JSONSharedDataPaths(json)

Аргументы

  • json — JSON-столбец. JSON

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

Возвращает массив путей, хранящихся в общей структуре данных JSON-столбца. Array(String)

Примеры

Пример использования

CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory;
INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}};
SELECT json, JSONSharedDataPaths(json) FROM test;
┌─json───────────────────────────┬─JSONSharedDataPaths(json)─┐
│ {"a":42}                       │ []                        │
│ {"b":"Hello"}                  │ ['b']                     │
│ {"a":[1,2,3],"c":"2020-01-01"} │ ['c']                     │
└────────────────────────────────┴───────────────────────────┘

JSONSharedDataPathsWithTypes

Добавленный в: v24.8.0

Возвращает список путей, хранящихся в общей структуре данных, и их типы для каждой строки в JSON-столбце.

Синтаксис

JSONSharedDataPathsWithTypes(json)

Аргументы

  • json — JSON-столбец. JSON

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

Возвращает отображение путей, хранящихся в общей структуре данных, и соответствующих им типов данных в JSON-столбце. Map(String, String)

Примеры

Пример использования

CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory;
INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}};
SELECT json, JSONSharedDataPathsWithTypes(json) FROM test;
┌─json───────────────────────────┬─JSONSharedDataPathsWithTypes(json)─┐
│ {"a":42}                       │ {}                                 │
│ {"b":"Hello"}                  │ {'b':'String'}                     │
│ {"a":[1,2,3],"c":"2020-01-01"} │ {'c':'Date'}                       │
└────────────────────────────────┴────────────────────────────────────┘

JSONType

Добавленный в: v20.1.0

Возвращает тип значения JSON. Если значение отсутствует, возвращается Null=0.

Синтаксис

JSONType(json[, indices_or_keys, ...])

Аргументы

  • json — JSON-строка для разбора String
  • json[, indices_or_keys, ...] — Список из нуля или более аргументов, каждый из которых может быть строкой или целым числом. String или (U)Int8/16/32/64

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

Возвращает тип значения JSON в виде строки; если значение не существует, возвращает Null=0 Enum

Примеры

Пример использования

SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}') = 'Object';
SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}', 'a') = 'String';
SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 'Array';
1
1
1

JSON_EXISTS

Добавленный в: v21.8.0

Если значение существует в JSON-документе, возвращается 1. Если значение не существует, возвращается 0.

Синтаксис

JSON_EXISTS(json, path)

Аргументы

  • json — Строка с корректным JSON. String
  • path — Строка, представляющая путь. String

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

Возвращает 1, если значение существует в JSON-документе, иначе — 0. UInt8

Примеры

Пример использования

SELECT JSON_EXISTS('{"hello":1}', '$.hello');
SELECT JSON_EXISTS('{"hello":{"world":1}}', '$.hello.world');
SELECT JSON_EXISTS('{"hello":["world"]}', '$.hello[*]');
SELECT JSON_EXISTS('{"hello":["world"]}', '$.hello[0]');
┌─JSON_EXISTS('{"hello":1}', '$.hello')─┐
│                                     1 │
└───────────────────────────────────────┘
┌─JSON_EXISTS('{"hello":{"world":1}}', '$.hello.world')─┐
│                                                     1 │
└───────────────────────────────────────────────────────┘
┌─JSON_EXISTS('{"hello":["world"]}', '$.hello[*]')─┐
│                                                1 │
└──────────────────────────────────────────────────┘
┌─JSON_EXISTS('{"hello":["world"]}', '$.hello[0]')─┐
│                                                1 │
└──────────────────────────────────────────────────┘

JSON_QUERY

Добавленный в: v21.8.0

Разбирает JSON и извлекает значение в виде JSON-массива или объекта JSON. Если значение отсутствует, возвращается пустая строка.

Синтаксис

JSON_QUERY(json, path)

Аргументы

  • json — Строка с корректным JSON. String
  • path — Строка, задающая путь. String

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

Возвращает извлечённый JSON-массив или объект JSON в виде строки либо пустую строку, если значение отсутствует. String

Примеры

Пример использования

SELECT JSON_QUERY('{"hello":"world"}', '$.hello');
SELECT JSON_QUERY('{"array":[[0, 1, 2, 3, 4, 5], [0, -1, -2, -3, -4, -5]]}', '$.array[*][0 to 2, 4]');
SELECT JSON_QUERY('{"hello":2}', '$.hello');
SELECT toTypeName(JSON_QUERY('{"hello":2}', '$.hello'));
["world"]
[0, 1, 4, 0, -1, -4]
[2]
String

JSON_VALUE

Добавленный в: v21.11.0

Разбирает JSON и извлекает значение в виде JSON-скаляра. Если значение не существует, по умолчанию возвращается пустая строка.

Поведение этой функции определяется следующими настройками:

  • при SET function_json_value_return_type_allow_nullable = true возвращается NULL. Если значение имеет сложный тип (например: struct, array, map), по умолчанию возвращается пустая строка.
  • при SET function_json_value_return_type_allow_complex = true возвращается сложное значение.

Синтаксис

JSON_VALUE(json, path)

Аргументы

  • json — Строка с корректным JSON. String
  • path — Строка, задающая путь. String

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

Возвращает извлечённое скалярное значение JSON в виде строки или пустую строку, если значение отсутствует. String

Примеры

Пример использования

SELECT JSON_VALUE('{"hello":"world"}', '$.hello');
SELECT JSON_VALUE('{"array":[[0, 1, 2, 3, 4, 5], [0, -1, -2, -3, -4, -5]]}', '$.array[*][0 to 2, 4]');
SELECT JSON_VALUE('{"hello":2}', '$.hello');
SELECT JSON_VALUE('{"hello":"world"}', '$.b') settings function_json_value_return_type_allow_nullable=true;
world
0
2
\N

dynamicElement

Добавленный в: v24.1.0

Извлекает столбец с указанным типом из столбца типа Dynamic.

Эта функция позволяет извлекать значения определённого типа из столбца типа Dynamic. Если строка содержит значение запрошенного типа, функция возвращает это значение. Если строка содержит значение другого типа или NULL, она возвращает NULL для скалярных типов или пустой массив для типов Array.

Синтаксис

dynamicElement(dynamic, type_name)

Аргументы

  • dynamic — столбец типа Dynamic, из которого извлекаются значения. Dynamic
  • type_name — имя типа варианта, который нужно извлечь (например, 'String', 'Int64', 'Array(Int64)').

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

Возвращает значения указанного типа из столбца типа Dynamic. Для несовпадающих типов возвращает NULL (или пустой массив для типов массива). Any

Примеры

Извлечение различных типов из столбца типа Dynamic

CREATE TABLE test (d Dynamic) ENGINE = Memory;
INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]);
SELECT d, dynamicType(d), dynamicElement(d, 'String'), dynamicElement(d, 'Int64'), dynamicElement(d, 'Array(Int64)'), dynamicElement(d, 'Date'), dynamicElement(d, 'Array(String)') FROM test
┌─d─────────────┬─dynamicType(d)─┬─dynamicElement(d, 'String')─┬─dynamicElement(d, 'Int64')─┬─dynamicElement(d, 'Array(Int64)')─┬─dynamicElement(d, 'Date')─┬─dynamicElement(d, 'Array(String)')─┐
│ ᴺᵁᴸᴸ          │ None           │ ᴺᵁᴸᴸ                        │                       ᴺᵁᴸᴸ │ []                                │                      ᴺᵁᴸᴸ │ []                                 │
│ 42            │ Int64          │ ᴺᵁᴸᴸ                        │                         42 │ []                                │                      ᴺᵁᴸᴸ │ []                                 │
│ Hello, World! │ String         │ Hello, World!               │                       ᴺᵁᴸᴸ │ []                                │                      ᴺᵁᴸᴸ │ []                                 │
│ [1,2,3]       │ Array(Int64)   │ ᴺᵁᴸᴸ                        │                       ᴺᵁᴸᴸ │ [1,2,3]                           │                      ᴺᵁᴸᴸ │ []                                 │
└───────────────┴────────────────┴─────────────────────────────┴────────────────────────────┴───────────────────────────────────┴───────────────────────────┴────────────────────────────────────┘

dynamicType

Добавленный в: v24.1.0

Возвращает имя типа варианта для каждой строки в столбце типа Dynamic.

Для строк, содержащих NULL, функция возвращает 'None'. Для всех остальных строк она возвращает фактический тип данных, хранящийся в этой строке столбца типа Dynamic (например, 'Int64', 'String', 'Array(Int64)').

Синтаксис

dynamicType(dynamic)

Аргументы

  • dynamic — столбец типа Dynamic для анализа. Dynamic

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

Возвращает имя типа значения, хранящегося в каждой строке, или 'None' для значений NULL. String

Примеры

Проверка типов в столбце типа Dynamic

CREATE TABLE test (d Dynamic) ENGINE = Memory;
INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]);
SELECT d, dynamicType(d) FROM test;
┌─d─────────────┬─dynamicType(d)─┐
│ ᴺᵁᴸᴸ          │ None           │
│ 42            │ Int64          │
│ Hello, World! │ String         │
│ [1,2,3]       │ Array(Int64)   │
└───────────────┴────────────────┘

isDynamicElementInSharedData

Добавленный в: v24.1.0

Возвращает true для строк в столбце типа Dynamic, которые хранятся в общем формате variant, а не в виде отдельных подстолбцов.

Если для столбца типа Dynamic задано ограничение max_types, значения, превышающие этот предел, сохраняются в общем бинарном формате, а не разделяются на отдельные типизированные подстолбцы. Эта функция определяет, какие строки хранятся в этом общем формате.

Синтаксис

isDynamicElementInSharedData(dynamic)

Аргументы

  • dynamic — столбец типа Dynamic для анализа. Dynamic

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

Возвращает true, если значение хранится в общем формате Variant, и false, если оно хранится как отдельный подстолбец или равно NULL. Bool

Примеры

Проверка формата хранения в столбце типа Dynamic с ограничением max_types

CREATE TABLE test (d Dynamic(max_types=2)) ENGINE = Memory;
INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]);
SELECT d, isDynamicElementInSharedData(d) FROM test;
┌─d─────────────┬─isDynamicElementInSharedData(d)─┐
│ ᴺᵁᴸᴸ          │ false                           │
│ 42            │ false                           │
│ Hello, World! │ false                           │
│ [1,2,3]       │ true                            │
└───────────────┴─────────────────────────────────┘

isValidJSON

Добавленный в: v20.1.0

Проверяет, является ли переданная строка корректным JSON.

Синтаксис

isValidJSON(json)

Аргументы

  • json — строка JSON, которую нужно проверить String

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

Возвращает 1, если строка содержит корректный JSON, иначе 0. UInt8

Примеры

Пример использования

SELECT isValidJSON('{"a": "hello", "b": [-100, 200.0, 300]}') = 1;
SELECT isValidJSON('not JSON') = 0;
1
1

Доступ к JSON-массивам и объектам JSON с помощью целых чисел

SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 0);
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 1);
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 2);
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', -1);
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', -2);
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 3);
0
1
1
1
1
0

prettyPrintJSON

Добавленный в: v26.4.0

Возвращает JSON-строку в удобочитаемом формате с переводами строк и отступами пробелами.

Синтаксис

prettyPrintJSON(json [, indent])

Аргументы

  • json — Допустимая JSON-строка для форматирования. String
  • indent — Число пробелов на каждый уровень отступа. По умолчанию: 4. Максимум: 32 UInt*

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

JSON-строка с форматированием для удобства чтения. String

Примеры

Простой объект

SELECT prettyPrintJSON('{"a":1,"b":"hello"}');
{\n    "a": 1,\n    "b": "hello"\n}

Настраиваемый отступ

SELECT prettyPrintJSON('{"a":1}', 8);
{\n        "a": 1\n}

simpleJSONExtractBool

Добавленный в: v21.4.0

Разбирает значение true/false из поля с именем field_name. Результат — UInt8.

Синтаксис

simpleJSONExtractBool(json, field_name)

Псевдонимы: visitParamExtractBool

Аргументы

  • json — JSON, в котором выполняется поиск поля. String
  • field_name — Имя искомого поля. const String

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

Возвращает 1, если значение поля равно true, в противном случае — 0. Это означает, что функция будет возвращать 0, в том числе (и не только) в следующих случаях:

  • Если поле не существует.
  • Если поле содержит true в виде строки, например: {"field":"true"}.
  • Если поле содержит 1 в виде числового значения. UInt8

Примеры

Пример использования

CREATE TABLE jsons
(
    `json` String
)
ENGINE = MergeTree
ORDER BY tuple();

INSERT INTO jsons VALUES ('{"foo":false,"bar":true}');
INSERT INTO jsons VALUES ('{"foo":"true","qux":1}');

SELECT simpleJSONExtractBool(json, 'bar') FROM jsons ORDER BY json;
SELECT simpleJSONExtractBool(json, 'foo') FROM jsons ORDER BY json;
0
1
0
0

simpleJSONExtractFloat

Добавленный в: v21.4.0

Разбирает Float64 из значения поля с именем field_name. Если field_name — строковое поле, пытается разобрать число из начала строки. Если поле не существует или существует, но не содержит числа, возвращается 0.

Синтаксис

simpleJSONExtractFloat(json, field_name)

Псевдонимы: visitParamExtractFloat

Аргументы

  • json — JSON, в котором ищется поле. String
  • field_name — Имя искомого поля. const String

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

Возвращает число, разобранное из значения поля, если поле существует и содержит число; в противном случае — 0. Float64

Примеры

Пример использования

CREATE TABLE jsons
(
    `json` String
)
ENGINE = MergeTree
ORDER BY tuple();

INSERT INTO jsons VALUES ('{"foo":"-4e3"}');
INSERT INTO jsons VALUES ('{"foo":-3.4}');
INSERT INTO jsons VALUES ('{"foo":5}');
INSERT INTO jsons VALUES ('{"foo":"not1number"}');
INSERT INTO jsons VALUES ('{"baz":2}');

SELECT simpleJSONExtractFloat(json, 'foo') FROM jsons ORDER BY json;
0
-4000
0
-3.4
5

simpleJSONExtractInt

Добавленный в: v21.4.0

Извлекает Int64 из значения поля с именем field_name. Если field_name — строковое поле, функция пытается разобрать число из начала строки. Если поле не существует или существует, но не содержит числа, возвращается 0.

Синтаксис

simpleJSONExtractInt(json, field_name)

Псевдонимы: visitParamExtractInt

Аргументы

  • json — JSON, в котором выполняется поиск поля. String
  • field_name — Имя искомого поля. const String

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

Возвращает число, разобранное из поля, если поле существует и содержит число, в противном случае возвращает 0 Int64

Примеры

Пример использования

CREATE TABLE jsons
(
    `json` String
)
ENGINE = MergeTree
ORDER BY tuple();

INSERT INTO jsons VALUES ('{"foo":"-4e3"}');
INSERT INTO jsons VALUES ('{"foo":-3.4}');
INSERT INTO jsons VALUES ('{"foo":5}');
INSERT INTO jsons VALUES ('{"foo":"not1number"}');
INSERT INTO jsons VALUES ('{"baz":2}');

SELECT simpleJSONExtractInt(json, 'foo') FROM jsons ORDER BY json;
0
-4
0
-3
5

simpleJSONExtractRaw

Добавленный в: v21.4.0

Возвращает значение поля с именем field_name в виде String, включая разделители.

Синтаксис

simpleJSONExtractRaw(json, field_name)

Псевдонимы: visitParamExtractRaw

Аргументы

  • json — JSON, в котором выполняется поиск поля. String
  • field_name — Имя искомого поля. const String

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

Возвращает значение поля в виде строки, включая разделители, если поле существует; в противном случае возвращается пустая строка String

Примеры

Пример использования

CREATE TABLE jsons
(
    `json` String
)
ENGINE = MergeTree
ORDER BY tuple();

INSERT INTO jsons VALUES ('{"foo":"-4e3"}');
INSERT INTO jsons VALUES ('{"foo":-3.4}');
INSERT INTO jsons VALUES ('{"foo":5}');
INSERT INTO jsons VALUES ('{"foo":{"def":[1,2,3]}}');
INSERT INTO jsons VALUES ('{"baz":2}');

SELECT simpleJSONExtractRaw(json, 'foo') FROM jsons ORDER BY json;
"-4e3"
-3.4
5
{"def":[1,2,3]}

simpleJSONExtractString

Добавленный в: v21.4.0

Извлекает строку String в двойных кавычках из значения поля с именем field_name.

Подробности реализации

В настоящее время не поддерживаются кодовые точки в формате \uXXXX\uYYYY, не относящиеся к базовой многоязычной плоскости (они преобразуются в CESU-8 вместо UTF-8).

Синтаксис

simpleJSONExtractString(json, field_name)

Псевдонимы: visitParamExtractString

Аргументы

  • json — JSON, в котором выполняется поиск поля. String
  • field_name — Имя поля, которое нужно найти. const String

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

Возвращает неэкранированное значение поля в виде строки, включая разделители. Если поле не содержит строку в двойных кавычках, не удаётся снять экранирование или поле не существует, возвращается пустая строка String

Примеры

Пример использования

CREATE TABLE jsons
(
    `json` String
)
ENGINE = MergeTree
ORDER BY tuple();

INSERT INTO jsons VALUES ('{"foo":"\\n\\u0000"}');
INSERT INTO jsons VALUES ('{"foo":"\\u263"}');
INSERT INTO jsons VALUES ('{"foo":"\\u263a"}');
INSERT INTO jsons VALUES ('{"foo":"hello}');

SELECT simpleJSONExtractString(json, 'foo') FROM jsons ORDER BY json;
\n\0

simpleJSONExtractUInt

Добавленный в: v21.4.0

Извлекает UInt64 из значения поля с именем field_name. Если field_name — строковое поле, функция пытается разобрать число из начала строки. Если поле не существует или существует, но не содержит числа, возвращает 0.

Синтаксис

simpleJSONExtractUInt(json, field_name)

Псевдонимы: visitParamExtractUInt

Аргументы

  • json — JSON, в котором выполняется поиск поля. String
  • field_name — Имя искомого поля. const String

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

Возвращает число, разобранное из поля, если поле существует и содержит число; в противном случае — 0 UInt64

Примеры

Пример использования

CREATE TABLE jsons
(
    `json` String
)
ENGINE = MergeTree
ORDER BY tuple();

INSERT INTO jsons VALUES ('{"foo":"4e3"}');
INSERT INTO jsons VALUES ('{"foo":3.4}');
INSERT INTO jsons VALUES ('{"foo":5}');
INSERT INTO jsons VALUES ('{"foo":"not1number"}');
INSERT INTO jsons VALUES ('{"baz":2}');

SELECT simpleJSONExtractUInt(json, 'foo') FROM jsons ORDER BY json;
0
4
0
3
5

simpleJSONHas

Добавленный в: v21.4.0

Проверяет, существует ли поле с именем field_name.

Синтаксис

simpleJSONHas(json, field_name)

Псевдонимы: visitParamHas

Аргументы

  • json — JSON, в котором ищется поле. String
  • field_name — Имя искомого поля. const String

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

Возвращает 1, если поле существует, иначе — 0 UInt8

Примеры

Пример использования

CREATE TABLE jsons
(
    `json` String
)
ENGINE = MergeTree
ORDER BY tuple();

INSERT INTO jsons VALUES ('{"foo":"true","qux":1}');

SELECT simpleJSONHas(json, 'foo') FROM jsons;
SELECT simpleJSONHas(json, 'bar') FROM jsons;
1
0

toJSONString

Добавленный в: v21.7.0

Сериализует значение в JSON-представление. Поддерживаются различные типы данных и вложенные структуры. 64-битные целые числа и более крупные (например, UInt64 или Int128) по умолчанию заключаются в кавычки. Это поведение контролируется параметром output_format_json_quote_64bit_integers. Специальные значения NaN и inf заменяются на null. Чтобы они отображались, включите настройку output_format_json_quote_denormals. При сериализации значения Enum функция выводит его имя.

См. также:

Синтаксис

toJSONString(value)

Аргументы

  • value — Значение для сериализации. Значение может быть любого типа данных. Any

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

Возвращает JSON-представление значения. String

Примеры

Сериализация Map

SELECT toJSONString(map('key1', 1, 'key2', 2));
┌─toJSONString(map('key1', 1, 'key2', 2))─┐
│ {"key1":1,"key2":2}                     │
└─────────────────────────────────────────┘

Специальные значения

SELECT toJSONString(tuple(1.25, NULL, NaN, +inf, -inf, [])) SETTINGS output_format_json_quote_denormals = 1;
┌─toJSONString((1.25, NULL, nan, inf, -inf, []))─┐
│ [1.25,null,"nan","inf","-inf",[]]              │
└────────────────────────────────────────────────┘
Navigation