Существует два набора функций для разбора JSON:
Функции simpleJSON (visitParam)
В ClickHouse есть специальные функции для работы с упрощённым JSON. Все эти JSON-функции основаны на строгих допущениях относительно того, каким может быть JSON. Они стараются делать как можно меньше, чтобы выполнить задачу как можно быстрее.
Предполагается следующее:
- Имя поля (аргумент функции) должно быть константой.
- Имя поля в JSON должно быть закодировано в канонической форме. Например:
simpleJSONHas('{"abc":"def"}', 'abc') = 1, но simpleJSONHas('{"\\u0061\\u0062\\u0063":"def"}', 'abc') = 0
- Поля ищутся на любом уровне вложенности без учёта контекста. Если есть несколько совпадающих полей, используется первое вхождение.
- В JSON не должно быть пробельных символов вне строковых литералов.
Эти функции основаны на simdjson и предназначены для более сложных сценариев парсинга JSON.
Эти функции выполняют регистронезависимое сопоставление ASCII-ключей при извлечении значений из объектов JSON.
Они работают так же, как и их регистрозависимые аналоги, за исключением того, что ключи объектов сопоставляются без учета регистра.
Если нескольким ключам с разным регистром соответствует совпадение, возвращается первое из них.
Эти функции могут работать медленнее, чем их регистрозависимые аналоги, поэтому по возможности используйте обычные функции JSONExtract.
Добавленный в: v24.8.0
Возвращает список всех путей, хранящихся в каждой строке 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'] │
└──────────────────────────────────────┴────────────────────┘
Добавленный в: 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'} │
└──────────────────────────────────────┴───────────────────────────────────────────┘
Добавленный в: v26.4.0
Возвращает все значения из каждой строки 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'] │
└──────────────────────────────────────┴──────────────────────────┘
Добавленный в: v23.2.0
Возвращает количество элементов в JSON-массиве верхнего уровня.
Функция возвращает NULL, если входная 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 │
└─────────────────────┴────────────────────────────┘
Добавленный в: v24.8.0
Возвращает список динамических путей, хранящихся в 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
Возвращаемое значение
Возвращает Map динамических путей и их типов данных в 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))'} │
└──────────────────────────────────────┴─────────────────────────────────┘
Добавленный в: 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]) │
└──────────────────────────────────┘
Добавленный в: 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.0','"hello"'] │
└──────────────────────────────┘
Добавленный в: 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')
Добавленный в: 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;
Добавленный в: 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')
Добавленный в: 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')
array_type
SELECT JSONExtractCaseInsensitive('{"List": [1, 2, 3]}', 'list', 'Array(Int32)')
Добавленный в: 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;
Добавленный в: 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')
Добавленный в: 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 │
└──────┘
Добавленный в: 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')
вложенный
SELECT JSONExtractIntCaseInsensitive('{"DATA": {"COUNT": 42}}', 'data', 'Count')
Добавленный в: 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'] │
└─────────────┘
Добавленный в: 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}}', 'Int8', 'x') 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.0]'),('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')]
Добавленный в: 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}')
вложенный
SELECT JSONExtractKeysCaseInsensitive('{"User": {"name": "John", "AGE": 25}}', 'user')
Добавленный в: 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.0,300] │
└──────────────────┘
Добавленный в: 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')
Добавленный в: 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 │
└───────┘
Добавленный в: 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')
вложенный
SELECT JSONExtractStringCaseInsensitive('{"User": {"Name": "John"}}', 'user', 'name')
Добавленный в: 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;
Добавленный в: 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')
Добавленный в: 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;
Добавленный в: 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);
Добавленный в: 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;
Добавленный в: 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"} │
└───────────────────────┘
Добавленный в: 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'} │
└──────────────────────────────────────┴─────────────────────────────────────┘
Добавленный в: 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';
Добавленный в: v21.8.0
Если значение существует в JSON-документе, возвращается 1.
Если значение не существует, возвращается 0.
Синтаксис
Аргументы
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 │
└──────────────────────────┘
┌─JSON_EXISTS(⋯llo.world')─┐
│ 1 │
└──────────────────────────┘
┌─JSON_EXISTS(⋯.hello[*]')─┐
│ 1 │
└──────────────────────────┘
┌─JSON_EXISTS(⋯.hello[0]')─┐
│ 1 │
└──────────────────────────┘
Добавленный в: v21.8.0
Разбирает JSON и извлекает значение в виде JSON-массива или объекта JSON.
Если значение отсутствует, возвращается пустая строка.
Синтаксис
Аргументы
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
Добавленный в: 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 — Строка с корректным 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;
Добавленный в: 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] │ ᴺᵁᴸᴸ │ [] │
└───────────────┴────────────────┴─────────────────────────────┴────────────────────────────┴───────────────────────────────────┴───────────────────────────┴────────────────────────────────────┘
Добавленный в: v24.1.0
Возвращает имя типа варианта для каждой строки в столбце типа Dynamic.
Для строк, содержащих NULL, функция возвращает ‘None’. Для всех остальных строк она возвращает фактический тип данных,
хранящийся в этой строке столбца типа Dynamic (например, ‘Int64’, ‘String’, ‘Array(Int64)’).
Синтаксис
Аргументы
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! │ true │
│ [1,2,3] │ true │
└───────────────┴─────────────────────────────────┘
Добавленный в: v20.1.0
Проверяет, является ли переданная строка корректным JSON.
Синтаксис
Аргументы
json — строка JSON, которую нужно проверить String
Возвращаемое значение
Возвращает 1, если строка содержит корректный JSON, иначе 0. UInt8
Примеры
Пример использования
SELECT isValidJSON('{"a": "hello", "b": [-100, 200.0, 300]}') = 1;
SELECT isValidJSON('not JSON') = 0;
Доступ к 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);
Добавленный в: 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;
Добавленный в: v21.4.0
Разбирает Float64 из значения поля с именем field_name.
Если field_name — строковое поле, пытается разобрать число из начала строки.
Если поле не существует или существует, но не содержит числа, возвращается 0.
Синтаксис
simpleJSONExtractFloat(json, field_name)
Псевдонимы: visitParamExtractFloat
Аргументы
Возвращаемое значение
Возвращает число, разобранное из значения поля, если поле существует и содержит число; в противном случае — 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;
Добавленный в: 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;
Добавленный в: 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]}
Добавленный в: 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;
Добавленный в: 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;
Добавленный в: v21.4.0
Проверяет, существует ли поле с именем field_name.
Синтаксис
simpleJSONHas(json, field_name)
Псевдонимы: visitParamHas
Аргументы
Возвращаемое значение
Возвращает 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;
Добавленный в: v21.7.0
Сериализует значение в JSON-представление. Поддерживаются различные типы данных и вложенные структуры.
64-битные целые числа и более крупные (например, UInt64 или Int128) по умолчанию заключаются в кавычки. Это поведение контролируется параметром output_format_json_quote_64bit_integers.
Специальные значения NaN и inf заменяются на null. Чтобы они отображались, включите настройку output_format_json_quote_denormals.
При сериализации значения Enum функция выводит его имя.
См. также:
Синтаксис
Аргументы
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(tuple(1.25, NULL, NaN, plus(inf), minus(inf), []))─┐
│ [1.25,null,"nan","inf","-inf",[]] │
└─────────────────────────────────────────────────────────────────┘
Последнее изменение 10 июня 2026 г.