Типы JSON-функций
simpleJSON*(visitParam*) — для чрезвычайно быстрого разбора ограниченного подмножества JSON.JSONExtract*— для разбора обычного JSON.
Функции simpleJSON (visitParam)
- Имя поля (аргумент функции) должно быть константой.
- Имя поля в JSON должно быть закодировано в канонической форме. Например:
simpleJSONHas('{"abc":"def"}', 'abc') = 1, ноsimpleJSONHas('{"\\u0061\\u0062\\u0063":"def"}', 'abc') = 0 - Поля ищутся на любом уровне вложенности без учёта контекста. Если есть несколько совпадающих полей, используется первое вхождение.
- В JSON не должно быть пробельных символов вне строковых литералов.
Функции JSONExtract
Регистронезависимые функции JSONExtract
Эти функции могут работать медленнее, чем их регистрозависимые аналоги, поэтому по возможности используйте обычные функции JSONExtract.
JSONAllPaths
json— JSON-столбец.JSON
Array(String)
Примеры
Пример использования
Query
Response
JSONAllPathsWithTypes
json— JSON-столбец.JSON
Map(String, String)
Примеры
Пример использования
Query
Response
JSONAllValues
json— JSON-столбец.JSON
Array(String)
Примеры
Пример использования
Query
Response
JSONArrayLength
NULL, если входная JSON-строка недействительна.
Синтаксис
JSON_ARRAY_LENGTH
Аргументы
json— строкаStringс корректным JSON.String
json является строкой с корректным JSON-массивом; в противном случае возвращает NULL. Nullable(UInt64)
Примеры
Пример использования
Query
Response
JSONDynamicPaths
json— JSON-столбец.JSON
Array(String)
Примеры
Пример использования
Query
Response
JSONDynamicPathsWithTypes
json— JSON-столбец.JSON
Map(String, String)
Примеры
Пример использования
Query
Response
JSONExtract
json— JSON-строка для разбора.Stringindices_or_keys— Список из нуля или более аргументов, каждый из которых может быть либо строкой, либо целым числом.Stringили(U)Int*return_type— Тип данных ClickHouse, который нужно вернуть.String
Query
Response
JSONExtractArrayRaw
json— JSON-строка для разбора.Stringindices_or_keys— Список из нуля или более аргументов, каждый из которых может быть строкой или целым числом.Stringили(U)Int*
Array(String)
Примеры
Пример использования
Query
Response
JSONExtractArrayRawCaseInsensitive
JSONExtractArrayRaw.
Синтаксис
json— JSON-строка для разбораStringindices_or_keys— Необязательно. Индексы или ключи для перехода к массиву. Для ключей используется регистронезависимое сравнениеStringили(U)Int*
Array(String)
Примеры
базовый
Query
Response
JSONExtractBool
json— JSON-строка для разбора.Stringindices_or_keys— Список из нуля или более аргументов, каждый из которых может быть либо строкой, либо целым числом.Stringили(U)Int*
0. Bool
Примеры
Пример использования
Query
Response
JSONExtractBoolCaseInsensitive
JSONExtractBool.
Синтаксис
json— JSON-строка для разбораStringindices_or_keys— Необязательно. Индексы или ключи для перехода к полю. Для ключей используется регистронезависимое сопоставлениеStringили(U)Int*
UInt8
Примеры
базовый
Query
Response
JSONExtractCaseInsensitive
JSONExtract.
Синтаксис
json— JSON-строка для разбораStringindices_or_keys— Необязательно. Индексы или ключи для перехода к полю. Для ключей используется регистронезависимое сопоставлениеStringили(U)Int*return_type— Тип данных ClickHouse, который нужно извлечьString
Any
Примеры
int_type
Query
Response
Query
Response
JSONExtractFloat
json— JSON-строка для разбора.Stringindices_or_keys— Список из нуля или более аргументов, каждый из которых может быть либо строкой, либо целым числом.Stringили(U)Int*
0. Float64
Примеры
Пример использования
Query
Response
JSONExtractFloatCaseInsensitive
JSONExtractFloat.
Синтаксис
json— JSON-строка для разбораStringindices_or_keys— Необязательно. Индексы или ключи для перехода к полю. Для ключей используется регистронезависимое сопоставлениеStringили(U)Int*
Float64
Примеры
базовый
Query
Response
JSONExtractInt
json— JSON-строка для разбора.Stringindices_or_keys— Список из нуля или более аргументов, каждый из которых может быть либо строкой, либо целым числом.Stringили(U)Int*
0. Int64
Примеры
Пример использования
Query
Response
JSONExtractIntCaseInsensitive
JSONExtractInt.
Синтаксис
json— JSON-строка для разбораStringindices_or_keys— Необязательно. Индексы или ключи для перехода к полю. Для ключей используется регистронезависимое сравнениеStringили(U)Int*
0, если значение не найдено или его нельзя преобразовать. Int64
Примеры
базовый пример
Query
Response
Query
Response
JSONExtractKeys
json— JSON-строка для разбора.Stringindices_or_keys— Список из нуля или более аргументов, каждый из которых может быть строкой или целым числом.Stringили(U)Int*
Array(String)
Примеры
Пример использования
Query
Response
JSONExtractKeysAndValues
json— JSON-строка для разбора.Stringindices_or_keys— Список из нуля или более аргументов, каждый из которых может быть строкой или целым числом.Stringили(U)Int*value_type— Тип данных ClickHouse для значений.String
Array(Tuple(String, value_type))
Примеры
Пример использования
Query
Response
JSONExtractKeysAndValuesCaseInsensitive
JSONExtractKeysAndValues.
Синтаксис
json— JSON-строка для разбораStringindices_or_keys— Необязательно. Индексы или ключи для перехода к объекту. Ключи сопоставляются без учета регистраStringили(U)Int*value_type— Тип данных ClickHouse для значенийString
Array(Tuple(String, T))
Примеры
базовый
Query
Response
JSONExtractKeysAndValuesRaw
json— JSON-строка для разбора.Stringindices_or_keys— Список из нуля или более аргументов, каждый из которых может быть строкой или целым числом.Stringили(U)Int*
Array(Tuple(String, String))
Примеры
Пример использования
Query
Response
JSONExtractKeysAndValuesRawCaseInsensitive
JSONExtractKeysAndValuesRaw.
Синтаксис
json— JSON-строка для разбораStringindices_or_keys— Необязательно. Индексы или ключи для перехода к объекту. Для ключей используется регистронезависимое сравнениеStringили(U)Int*
Array(Tuple(String, String))
Примеры
простой
Query
Response
JSONExtractKeysCaseInsensitive
JSONExtractKeys.
Синтаксис
json— JSON-строка для разбораStringindices_or_keys— Необязательно. Индексы или ключи для перехода к объекту. Ключи используют регистронезависимое сопоставление ключейStringили(U)Int*
Array(String)
Примеры
базовый
Query
Response
Query
Response
JSONExtractRaw
json— JSON-строка для разбора.Stringindices_or_keys— Список из нуля или более аргументов, каждый из которых может быть либо строкой, либо целым числом.Stringили(U)Int*
String
Примеры
Пример использования
Query
Response
JSONExtractRawCaseInsensitive
JSONExtractRaw.
Синтаксис
json— JSON-строка для разбораStringindices_or_keys— Необязательно. Индексы или ключи для перехода к полю. Для ключей используется регистронезависимое сопоставлениеStringили(U)Int*
String
Примеры
объект
Query
Response
JSONExtractString
json— JSON-строка для разбора.Stringindices_or_keys— Список из нуля или более аргументов, каждый из которых может быть либо строкой, либо целым числом.Stringили(U)Int*
String
Примеры
Пример использования
Query
Response
JSONExtractStringCaseInsensitive
JSONExtractString.
Синтаксис
json— JSON-строка для разбораStringindices_or_keys— Необязательно. Индексы или ключи для перехода к нужному полю. Для ключей используется регистронезависимое сопоставлениеStringили(U)Int*
String
Примеры
базовый
Query
Response
Query
Response
JSONExtractUInt
json— JSON-строка для разбора.Stringindices_or_keys— Список из нуля, одного или нескольких аргументов, каждый из которых может быть строкой или целым числом.Stringили(U)Int*
0. UInt64
Примеры
Пример использования
Query
Response
JSONExtractUIntCaseInsensitive
JSONExtractUInt.
Синтаксис
json— JSON-строка для разбораStringindices_or_keys— Необязательно. Индексы или ключи для перехода к полю. Ключи используют регистронезависимое сопоставлениеStringили(U)Int*
0, если значение не найдено или его невозможно преобразовать. UInt64
Примеры
базовый
Query
Response
JSONHas
json— JSON-строка для разбораString[ ,indices_or_keys, ...]— Список из нуля или более аргументов.Stringили(U)Int*
1, если значение присутствует в json, в противном случае — 0 UInt8
Примеры
Пример использования
Query
Response
JSONKey
json— JSON-строка для разбора.Stringindices_or_keys— Необязательный список индексов или ключей, указывающий путь к вложенному элементу. Каждый argument может быть либо строкой (доступ по ключу), либо целым числом (доступ по индексу, начиная с 1).StringилиInt*
String
Примеры
Пример использования
Query
Response
JSONLength
0.
Синтаксис
json— JSON-строка для разбораString[, indices_or_keys, ...]— Необязательно. Список из нуля или более аргументов.Stringили(U)Int8/16/32/64
0, если значение отсутствует или имеет неверный тип. UInt64
Примеры
Пример использования
Query
Response
JSONMergePatch
jsonMergePatch
Аргументы
json1[, json2, ...]— Одна или несколько строк с корректным JSON.String
String
Примеры
Пример использования
Query
Response
json— JSON-столбец.JSON
Array(String)
Примеры
Пример использования
Query
Response
json— JSON-столбец.JSON
Map(String, String)
Примеры
Пример использования
Query
Response
JSONType
Null=0.
Синтаксис
json— JSON-строка для разбораStringjson[, indices_or_keys, ...]— Список из нуля или более аргументов, каждый из которых может быть строкой или целым числом.Stringили(U)Int8/16/32/64
Null=0 Enum
Примеры
Пример использования
Query
Response
JSON_EXISTS
1.
Если значение не существует, возвращается 0.
Синтаксис
1, если значение существует в JSON-документе, иначе — 0. UInt8
Примеры
Пример использования
Query
Response
JSON_QUERY
String
Примеры
Пример использования
Query
Response
JSON_VALUE
- при SET
function_json_value_return_type_allow_nullable=trueвозвращаетсяNULL. Если значение имеет сложный тип (например: struct, array, map), по умолчанию возвращается пустая строка. - при SET
function_json_value_return_type_allow_complex=trueвозвращается сложное значение.
String
Примеры
Пример использования
Query
Response
dynamicElement
Dynamic.
Эта функция позволяет извлекать значения определённого типа из столбца типа Dynamic. Если строка содержит значение
запрошенного типа, функция возвращает это значение. Если строка содержит значение другого типа или NULL, она возвращает NULL
для скалярных типов или пустой массив для типов Array.
Синтаксис
dynamic— столбец типа Dynamic, из которого извлекаются значения.Dynamictype_name— имя типа варианта, который нужно извлечь (например, ‘String’, ‘Int64’, ‘Array(Int64)’).
Any
Примеры
Извлечение различных типов из столбца типа Dynamic
Query
Response
dynamicType
Dynamic.
Для строк, содержащих NULL, функция возвращает ‘None’. Для всех остальных строк она возвращает фактический тип данных,
хранящийся в этой строке столбца типа Dynamic (например, ‘Int64’, ‘String’, ‘Array(Int64)’).
Синтаксис
dynamic— столбец типа Dynamic для анализа.Dynamic
String
Примеры
Проверка типов в столбце типа Dynamic
Query
Response
max_types, значения, превышающие этот предел, сохраняются в общем бинарном формате,
а не разделяются на отдельные типизированные подстолбцы. Эта функция определяет, какие строки хранятся в этом общем формате.
Синтаксис
dynamic— столбец типа Dynamic для анализа.Dynamic
Bool
Примеры
Проверка формата хранения в столбце типа Dynamic с ограничением max_types
Query
Response
isValidJSON
json— строка JSON, которую нужно проверитьString
1, если строка содержит корректный JSON, иначе 0. UInt8
Примеры
Пример использования
Query
Response
Query
Response
prettyPrintJSON
json— Допустимая JSON-строка для форматирования.Stringindent— Число пробелов на каждый уровень отступа. По умолчанию: 4. Максимум: 32UInt*
String
Примеры
Простой объект
Query
Response
Query
Response
simpleJSONExtractBool
field_name.
Результат — UInt8.
Синтаксис
visitParamExtractBool
Аргументы
json— JSON, в котором выполняется поиск поля.Stringfield_name— Имя искомого поля.const String
1, если значение поля равно true, в противном случае — 0. Это означает, что функция будет возвращать 0, в том числе (и не только) в следующих случаях:
- Если поле не существует.
- Если поле содержит
trueв виде строки, например:{"field":"true"}. - Если поле содержит
1в виде числового значения.UInt8
Query
Response
simpleJSONExtractFloat
Float64 из значения поля с именем field_name.
Если field_name — строковое поле, пытается разобрать число из начала строки.
Если поле не существует или существует, но не содержит числа, возвращается 0.
Синтаксис
visitParamExtractFloat
Аргументы
json— JSON, в котором ищется поле.Stringfield_name— Имя искомого поля.const String
0. Float64
Примеры
Пример использования
Query
Response
simpleJSONExtractInt
Int64 из значения поля с именем field_name.
Если field_name — строковое поле, функция пытается разобрать число из начала строки.
Если поле не существует или существует, но не содержит числа, возвращается 0.
Синтаксис
visitParamExtractInt
Аргументы
json— JSON, в котором выполняется поиск поля.Stringfield_name— Имя искомого поля.const String
0 Int64
Примеры
Пример использования
Query
Response
simpleJSONExtractRaw
field_name в виде String, включая разделители.
Синтаксис
visitParamExtractRaw
Аргументы
json— JSON, в котором выполняется поиск поля.Stringfield_name— Имя искомого поля.const String
String
Примеры
Пример использования
Query
Response
simpleJSONExtractString
String в двойных кавычках из значения поля с именем field_name.
Подробности реализации
В настоящее время не поддерживаются кодовые точки в формате \uXXXX\uYYYY, не относящиеся к базовой многоязычной плоскости (они преобразуются в CESU-8 вместо UTF-8).
Синтаксис
visitParamExtractString
Аргументы
json— JSON, в котором выполняется поиск поля.Stringfield_name— Имя поля, которое нужно найти.const String
String
Примеры
Пример использования
Query
Response
simpleJSONExtractUInt
UInt64 из значения поля с именем field_name.
Если field_name — строковое поле, функция пытается разобрать число из начала строки.
Если поле не существует или существует, но не содержит числа, возвращает 0.
Синтаксис
visitParamExtractUInt
Аргументы
json— JSON, в котором выполняется поиск поля.Stringfield_name— Имя искомого поля.const String
0 UInt64
Примеры
Пример использования
Query
Response
simpleJSONHas
field_name.
Синтаксис
visitParamHas
Аргументы
json— JSON, в котором ищется поле.Stringfield_name— Имя искомого поля.const String
1, если поле существует, иначе — 0 UInt8
Примеры
Пример использования
Query
Response
toJSONString
UInt64 или Int128) по умолчанию заключаются в кавычки. Это поведение контролируется параметром output_format_json_quote_64bit_integers.
Специальные значения NaN и inf заменяются на null. Чтобы они отображались, включите настройку output_format_json_quote_denormals.
При сериализации значения Enum функция выводит его имя.
См. также:
Синтаксис
value— Значение для сериализации. Значение может быть любого типа данных.Any
String
Примеры
Сериализация Map
Query
Response
Query
Response