> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8a08bda2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Документация по функциям JSON

# Функции JSON

<div id="types-of-functions">
  ## Типы JSON-функций
</div>

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

* [`simpleJSON*` (`visitParam*`)](#simplejson-visitparam-functions) — для чрезвычайно быстрого разбора ограниченного подмножества JSON.
* [`JSONExtract*`](#jsonextract-functions) — для разбора обычного JSON.

<div id="simplejson-visitparam-functions">
  ### Функции simpleJSON (visitParam)
</div>

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

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

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

<div id="jsonextract-functions">
  ### Функции JSONExtract
</div>

Эти функции основаны на [simdjson](https://github.com/lemire/simdjson) и предназначены для более сложных сценариев парсинга JSON.

<div id="case-insensitive-jsonextract-functions">
  ### Регистронезависимые функции JSONExtract
</div>

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

<Note>
  Эти функции могут работать медленнее, чем их регистрозависимые аналоги, поэтому по возможности используйте обычные функции JSONExtract.
</Note>

{/*AUTOGENERATED_START*/}

<div id="JSONAllPaths">
  ## JSONAllPaths
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONAllPaths(json)
```

**Аргументы**

* `json` — JSON-столбец. [`JSON`](/ru/reference/data-types/newjson)

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

Возвращает массив всех путей в JSON-столбце. [`Array(String)`](/ru/reference/data-types/array)

**Примеры**

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

```sql title=Query theme={null}
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;
```

```response title=Response theme={null}
┌─json─────────────────────────────────┬─JSONAllPaths(json)─┐
│ {"a":"42"}                           │ ['a']              │
│ {"b":"Hello"}                        │ ['b']              │
│ {"a":["1","2","3"],"c":"2020-01-01"} │ ['a','c']          │
└──────────────────────────────────────┴────────────────────┘
```

<div id="JSONAllPathsWithTypes">
  ## JSONAllPathsWithTypes
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONAllPathsWithTypes(json)
```

**Аргументы**

* `json` — JSON-столбец. [`JSON`](/ru/reference/data-types/newjson)

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

Возвращает карту всех путей и их типов данных в JSON-столбце. [`Map(String, String)`](/ru/reference/data-types/map)

**Примеры**

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

```sql title=Query theme={null}
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;
```

```response title=Response theme={null}
┌─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'} │
└──────────────────────────────────────┴───────────────────────────────────────────┘
```

<div id="JSONAllValues">
  ## JSONAllValues
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONAllValues(json)
```

**Аргументы**

* `json` — JSON-столбец. [`JSON`](/ru/reference/data-types/newjson)

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

Возвращает массив всех значений JSON-столбца в виде строк. [`Array(String)`](/ru/reference/data-types/array)

**Примеры**

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

```sql title=Query theme={null}
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;
```

```response title=Response theme={null}
┌─json─────────────────────────────────┬─JSONAllValues(json)──────┐
│ {"a":42}                             │ ['42']                   │
│ {"b":"Hello"}                        │ ['Hello']                │
│ {"a":[1,2,3],"c":"2020-01-01"}       │ ['[1,2,3]','2020-01-01'] │
└──────────────────────────────────────┴──────────────────────────┘
```

<div id="JSONArrayLength">
  ## JSONArrayLength
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONArrayLength(json)
```

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

**Аргументы**

* `json` — строка `String` с корректным JSON. [`String`](/ru/reference/data-types/string)

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

Возвращает количество элементов массива, если `json` является строкой с корректным JSON-массивом; в противном случае возвращает `NULL`. [`Nullable(UInt64)`](/ru/reference/data-types/nullable)

**Примеры**

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

```sql title=Query theme={null}
SELECT
    JSONArrayLength(''),
    JSONArrayLength('[1,2,3]');
```

```response title=Response theme={null}
┌─JSONArrayLength('')─┬─JSONArrayLength('[1,2,3]')─┐
│                ᴺᵁᴸᴸ │                          3 │
└─────────────────────┴────────────────────────────┘
```

<div id="JSONDynamicPaths">
  ## JSONDynamicPaths
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONDynamicPaths(json)
```

**Аргументы**

* `json` — JSON-столбец. [`JSON`](/ru/reference/data-types/newjson)

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

Возвращает массив динамических путей из JSON-столбца. [`Array(String)`](/ru/reference/data-types/array)

**Примеры**

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

```sql title=Query theme={null}
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;
```

```response title=Response theme={null}
┌─json─────────────────────────────────┬─JSONDynamicPaths(json)─┐
│ {"a":"42"}                           │ ['a']                  │
│ {"b":"Hello"}                        │ []                     │
│ {"a":["1","2","3"],"c":"2020-01-01"} │ ['a']                  │
└──────────────────────────────────────┴────────────────────────┘
```

<div id="JSONDynamicPathsWithTypes">
  ## JSONDynamicPathsWithTypes
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONDynamicPathsWithTypes(json)
```

**Аргументы**

* `json` — JSON-столбец. [`JSON`](/ru/reference/data-types/newjson)

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

Возвращает Map динамических путей и их типов данных в JSON-столбце. [`Map(String, String)`](/ru/reference/data-types/map)

**Примеры**

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

```sql title=Query theme={null}
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;
```

```response title=Response theme={null}
┌─json─────────────────────────────────┬─JSONDynamicPathsWithTypes(json)─┐
│ {"a":"42"}                           │ {'a':'Int64'}                   │
│ {"b":"Hello"}                        │ {}                              │
│ {"a":["1","2","3"],"c":"2020-01-01"} │ {'a':'Array(Nullable(Int64))'}  │
└──────────────────────────────────────┴─────────────────────────────────┘
```

<div id="JSONExtract">
  ## JSONExtract
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONExtract(json[, indices_or_keys, ...], return_type)
```

**Аргументы**

* `json` — JSON-строка для разбора. [`String`](/ru/reference/data-types/string)
* `indices_or_keys` — Список из нуля или более аргументов, каждый из которых может быть либо строкой, либо целым числом. [`String`](/ru/reference/data-types/string) или [`(U)Int*`](/ru/reference/data-types/int-uint)
* `return_type` — Тип данных ClickHouse, который нужно вернуть. [`String`](/ru/reference/data-types/string)

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

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

**Примеры**

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

```sql title=Query theme={null}
SELECT JSONExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'Tuple(String, Array(Float64))') AS res;
```

```response title=Response theme={null}
┌─res──────────────────────────────┐
│ ('hello',[-100,200,300])         │
└──────────────────────────────────┘
```

<div id="JSONExtractArrayRaw">
  ## JSONExtractArrayRaw
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONExtractArrayRaw(json[, indices_or_keys, ...])
```

**Аргументы**

* `json` — JSON-строка для разбора. [`String`](/ru/reference/data-types/string)
* `indices_or_keys` — Список из нуля или более аргументов, каждый из которых может быть строкой или целым числом. [`String`](/ru/reference/data-types/string) или [`(U)Int*`](/ru/reference/data-types/int-uint)

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

Возвращает массив строк, содержащий элементы JSON-массива. Если соответствующая часть не является массивом или не существует, возвращается пустой массив. [`Array(String)`](/ru/reference/data-types/array)

**Примеры**

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

```sql title=Query theme={null}
SELECT JSONExtractArrayRaw('{"a": "hello", "b": [-100, 200.0, "hello"]}', 'b') AS res;
```

```response title=Response theme={null}
┌─res──────────────────────────┐
│ ['-100','200.0','"hello"']   │
└──────────────────────────────┘
```

<div id="JSONExtractArrayRawCaseInsensitive">
  ## JSONExtractArrayRawCaseInsensitive
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONExtractArrayRawCaseInsensitive(json [, indices_or_keys]...)
```

**Аргументы**

* `json` — JSON-строка для разбора [`String`](/ru/reference/data-types/string)
* `indices_or_keys` — Необязательно. Индексы или ключи для перехода к массиву. Для ключей используется регистронезависимое сравнение [`String`](/ru/reference/data-types/string) или [`(U)Int*`](/ru/reference/data-types/int-uint)

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

Возвращает массив необработанных JSON-строк. [`Array(String)`](/ru/reference/data-types/array)

**Примеры**

**базовый**

```sql title=Query theme={null}
SELECT JSONExtractArrayRawCaseInsensitive('{"Items": [1, 2, 3]}', 'ITEMS')
```

```response title=Response theme={null}
['1','2','3']
```

<div id="JSONExtractBool">
  ## JSONExtractBool
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONExtractBool(json[, indices_or_keys, ...])
```

**Аргументы**

* `json` — JSON-строка для разбора. [`String`](/ru/reference/data-types/string)
* `indices_or_keys` — Список из нуля или более аргументов, каждый из которых может быть либо строкой, либо целым числом. [`String`](/ru/reference/data-types/string) или [`(U)Int*`](/ru/reference/data-types/int-uint)

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

Возвращает значение типа Bool, если оно существует; в противном случае возвращает `0`. [`Bool`](/ru/reference/data-types/boolean)

**Примеры**

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

```sql title=Query theme={null}
SELECT JSONExtractBool('{"passed": true}', 'passed') AS res;
```

```response title=Response theme={null}
┌─res─┐
│   1 │
└─────┘
```

<div id="JSONExtractBoolCaseInsensitive">
  ## JSONExtractBoolCaseInsensitive
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONExtractBoolCaseInsensitive(json [, indices_or_keys]...)
```

**Аргументы**

* `json` — JSON-строка для разбора [`String`](/ru/reference/data-types/string)
* `indices_or_keys` — Необязательно. Индексы или ключи для перехода к полю. Для ключей используется регистронезависимое сопоставление [`String`](/ru/reference/data-types/string) или [`(U)Int*`](/ru/reference/data-types/int-uint)

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

Возвращает извлечённое логическое значение (1 для true, 0 для false), либо 0, если значение не найдено. [`UInt8`](/ru/reference/data-types/int-uint)

**Примеры**

**базовый**

```sql title=Query theme={null}
SELECT JSONExtractBoolCaseInsensitive('{"IsActive": true}', 'isactive')
```

```response title=Response theme={null}
1
```

<div id="JSONExtractCaseInsensitive">
  ## JSONExtractCaseInsensitive
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONExtractCaseInsensitive(json [, indices_or_keys...], return_type)
```

**Аргументы**

* `json` — JSON-строка для разбора [`String`](/ru/reference/data-types/string)
* `indices_or_keys` — Необязательно. Индексы или ключи для перехода к полю. Для ключей используется регистронезависимое сопоставление [`String`](/ru/reference/data-types/string) или [`(U)Int*`](/ru/reference/data-types/int-uint)
* `return_type` — Тип данных ClickHouse, который нужно извлечь [`String`](/ru/reference/data-types/string)

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

Возвращает извлечённое значение в указанном типе данных. [`Any`](/ru/reference/data-types)

**Примеры**

**int\_type**

```sql title=Query theme={null}
SELECT JSONExtractCaseInsensitive('{"Number": 123}', 'number', 'Int32')
```

```response title=Response theme={null}
123
```

**array\_type**

```sql title=Query theme={null}
SELECT JSONExtractCaseInsensitive('{"List": [1, 2, 3]}', 'list', 'Array(Int32)')
```

```response title=Response theme={null}
[1,2,3]
```

<div id="JSONExtractFloat">
  ## JSONExtractFloat
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONExtractFloat(json[, indices_or_keys, ...])
```

**Аргументы**

* `json` — JSON-строка для разбора. [`String`](/ru/reference/data-types/string)
* `indices_or_keys` — Список из нуля или более аргументов, каждый из которых может быть либо строкой, либо целым числом. [`String`](/ru/reference/data-types/string) или [`(U)Int*`](/ru/reference/data-types/int-uint)

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

Возвращает значение типа Float, если оно существует; в противном случае — `0`. [`Float64`](/ru/reference/data-types/float)

**Примеры**

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

```sql title=Query theme={null}
SELECT JSONExtractFloat('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 2) AS res;
```

```response title=Response theme={null}
┌─res─┐
│ 200 │
└─────┘
```

<div id="JSONExtractFloatCaseInsensitive">
  ## JSONExtractFloatCaseInsensitive
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONExtractFloatCaseInsensitive(json [, indices_or_keys]...)
```

**Аргументы**

* `json` — JSON-строка для разбора [`String`](/ru/reference/data-types/string)
* `indices_or_keys` — Необязательно. Индексы или ключи для перехода к полю. Для ключей используется регистронезависимое сопоставление [`String`](/ru/reference/data-types/string) или [`(U)Int*`](/ru/reference/data-types/int-uint)

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

Возвращает извлечённое значение типа Float; 0, если оно не найдено или не может быть преобразовано. [`Float64`](/ru/reference/data-types/float)

**Примеры**

**базовый**

```sql title=Query theme={null}
SELECT JSONExtractFloatCaseInsensitive('{"Price": 12.34}', 'PRICE')
```

```response title=Response theme={null}
12.34
```

<div id="JSONExtractInt">
  ## JSONExtractInt
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONExtractInt(json[, indices_or_keys, ...])
```

**Аргументы**

* `json` — JSON-строка для разбора. [`String`](/ru/reference/data-types/string)
* `indices_or_keys` — Список из нуля или более аргументов, каждый из которых может быть либо строкой, либо целым числом. [`String`](/ru/reference/data-types/string) или [`(U)Int*`](/ru/reference/data-types/int-uint)

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

Возвращает значение типа Int, если оно существует; в противном случае возвращает `0`. [`Int64`](/ru/reference/data-types/int-uint)

**Примеры**

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

```sql title=Query theme={null}
SELECT JSONExtractInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 1) AS res;
```

```response title=Response theme={null}
┌──res─┐
│ -100 │
└──────┘
```

<div id="JSONExtractIntCaseInsensitive">
  ## JSONExtractIntCaseInsensitive
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONExtractIntCaseInsensitive(json [, indices_or_keys]...)
```

**Аргументы**

* `json` — JSON-строка для разбора [`String`](/ru/reference/data-types/string)
* `indices_or_keys` — Необязательно. Индексы или ключи для перехода к полю. Для ключей используется регистронезависимое сравнение [`String`](/ru/reference/data-types/string) или [`(U)Int*`](/ru/reference/data-types/int-uint)

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

Возвращает извлечённое значение типа Int; `0`, если значение не найдено или его нельзя преобразовать. [`Int64`](/ru/reference/data-types/int-uint)

**Примеры**

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

```sql title=Query theme={null}
SELECT JSONExtractIntCaseInsensitive('{"Value": 123}', 'value')
```

```response title=Response theme={null}
123
```

**вложенный**

```sql title=Query theme={null}
SELECT JSONExtractIntCaseInsensitive('{"DATA": {"COUNT": 42}}', 'data', 'Count')
```

```response title=Response theme={null}
42
```

<div id="JSONExtractKeys">
  ## JSONExtractKeys
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONExtractKeys(json[, indices_or_keys, ...])
```

**Аргументы**

* `json` — JSON-строка для разбора. [`String`](/ru/reference/data-types/string)
* `indices_or_keys` — Список из нуля или более аргументов, каждый из которых может быть строкой или целым числом. [`String`](/ru/reference/data-types/string) или [`(U)Int*`](/ru/reference/data-types/int-uint)

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

Возвращает массив ключей объекта JSON. [`Array(String)`](/ru/reference/data-types/array)

**Примеры**

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

```sql title=Query theme={null}
SELECT JSONExtractKeys('{"a": "hello", "b": [-100, 200.0, 300]}') AS res;
```

```response title=Response theme={null}
┌─res─────────┐
│ ['a','b']   │
└─────────────┘
```

<div id="JSONExtractKeysAndValues">
  ## JSONExtractKeysAndValues
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONExtractKeysAndValues(json[, indices_or_keys, ...], value_type)
```

**Аргументы**

* `json` — JSON-строка для разбора. [`String`](/ru/reference/data-types/string)
* `indices_or_keys` — Список из нуля или более аргументов, каждый из которых может быть строкой или целым числом. [`String`](/ru/reference/data-types/string) или [`(U)Int*`](/ru/reference/data-types/int-uint)
* `value_type` — Тип данных ClickHouse для значений. [`String`](/ru/reference/data-types/string)

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

Возвращает массив Tuple с разобранными парами ключ-значение. [`Array(Tuple(String, value_type))`](/ru/reference/data-types/array)

**Примеры**

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

```sql title=Query theme={null}
SELECT JSONExtractKeysAndValues('{"x": {"a": 5, "b": 7, "c": 11}}', 'Int8', 'x') AS res;
```

```response title=Response theme={null}
┌─res────────────────────┐
│ [('a',5),('b',7),('c',11)] │
└────────────────────────┘
```

<div id="JSONExtractKeysAndValuesCaseInsensitive">
  ## JSONExtractKeysAndValuesCaseInsensitive
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONExtractKeysAndValuesCaseInsensitive(json [, indices_or_keys...], value_type)
```

**Аргументы**

* `json` — JSON-строка для разбора [`String`](/ru/reference/data-types/string)
* `indices_or_keys` — Необязательно. Индексы или ключи для перехода к объекту. Ключи сопоставляются без учета регистра [`String`](/ru/reference/data-types/string) или [`(U)Int*`](/ru/reference/data-types/int-uint)
* `value_type` — Тип данных ClickHouse для значений [`String`](/ru/reference/data-types/string)

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

Возвращает массив кортежей, содержащих пары ключ-значение. [`Array(Tuple(String, T))`](/ru/reference/data-types/array)

**Примеры**

**базовый**

```sql title=Query theme={null}
SELECT JSONExtractKeysAndValuesCaseInsensitive('{"Name": "Alice", "AGE": 30}', 'String')
```

```response title=Response theme={null}
[('Name','Alice'),('AGE','30')]
```

<div id="JSONExtractKeysAndValuesRaw">
  ## JSONExtractKeysAndValuesRaw
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONExtractKeysAndValuesRaw(json[, indices_or_keys, ...])
```

**Аргументы**

* `json` — JSON-строка для разбора. [`String`](/ru/reference/data-types/string)
* `indices_or_keys` — Список из нуля или более аргументов, каждый из которых может быть строкой или целым числом. [`String`](/ru/reference/data-types/string) или [`(U)Int*`](/ru/reference/data-types/int-uint)

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

Возвращает массив кортежей с разобранными парами ключ-значение, где значения представлены неразобранными строками. [`Array(Tuple(String, String))`](/ru/reference/data-types/array)

**Примеры**

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

```sql title=Query theme={null}
SELECT JSONExtractKeysAndValuesRaw('{"a": [-100, 200.0], "b": "hello"}') AS res;
```

```response title=Response theme={null}
┌─res──────────────────────────────────┐
│ [('a','[-100,200.0]'),('b','"hello"')] │
└──────────────────────────────────────┘
```

<div id="JSONExtractKeysAndValuesRawCaseInsensitive">
  ## JSONExtractKeysAndValuesRawCaseInsensitive
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONExtractKeysAndValuesRawCaseInsensitive(json [, indices_or_keys]...)
```

**Аргументы**

* `json` — JSON-строка для разбора [`String`](/ru/reference/data-types/string)
* `indices_or_keys` — Необязательно. Индексы или ключи для перехода к объекту. Для ключей используется регистронезависимое сравнение [`String`](/ru/reference/data-types/string) или [`(U)Int*`](/ru/reference/data-types/int-uint)

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

Возвращает массив Tuple, содержащих пары ключ-значение в виде строк в исходном виде. [`Array(Tuple(String, String))`](/ru/reference/data-types/array)

**Примеры**

**простой**

```sql title=Query theme={null}
SELECT JSONExtractKeysAndValuesRawCaseInsensitive('{"Name": "Alice", "AGE": 30}')
```

```response title=Response theme={null}
[('Name','"Alice"'),('AGE','30')]
```

<div id="JSONExtractKeysCaseInsensitive">
  ## JSONExtractKeysCaseInsensitive
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONExtractKeysCaseInsensitive(json [, indices_or_keys]...)
```

**Аргументы**

* `json` — JSON-строка для разбора [`String`](/ru/reference/data-types/string)
* `indices_or_keys` — Необязательно. Индексы или ключи для перехода к объекту. Ключи используют регистронезависимое сопоставление ключей [`String`](/ru/reference/data-types/string) или [`(U)Int*`](/ru/reference/data-types/int-uint)

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

Возвращает массив ключей из объекта JSON. [`Array(String)`](/ru/reference/data-types/array)

**Примеры**

**базовый**

```sql title=Query theme={null}
SELECT JSONExtractKeysCaseInsensitive('{"Name": "Alice", "AGE": 30}')
```

```response title=Response theme={null}
['Name','AGE']
```

**вложенный**

```sql title=Query theme={null}
SELECT JSONExtractKeysCaseInsensitive('{"User": {"name": "John", "AGE": 25}}', 'user')
```

```response title=Response theme={null}
['name','AGE']
```

<div id="JSONExtractRaw">
  ## JSONExtractRaw
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONExtractRaw(json[, indices_or_keys, ...])
```

**Аргументы**

* `json` — JSON-строка для разбора. [`String`](/ru/reference/data-types/string)
* `indices_or_keys` — Список из нуля или более аргументов, каждый из которых может быть либо строкой, либо целым числом. [`String`](/ru/reference/data-types/string) или [`(U)Int*`](/ru/reference/data-types/int-uint)

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

Возвращает часть JSON в виде неразобранной строки. Если эта часть не существует или имеет неверный тип, возвращается пустая строка. [`String`](/ru/reference/data-types/string)

**Примеры**

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

```sql title=Query theme={null}
SELECT JSONExtractRaw('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') AS res;
```

```response title=Response theme={null}
┌─res──────────────┐
│ [-100,200.0,300] │
└──────────────────┘
```

<div id="JSONExtractRawCaseInsensitive">
  ## JSONExtractRawCaseInsensitive
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONExtractRawCaseInsensitive(json [, indices_or_keys]...)
```

**Аргументы**

* `json` — JSON-строка для разбора [`String`](/ru/reference/data-types/string)
* `indices_or_keys` — Необязательно. Индексы или ключи для перехода к полю. Для ключей используется регистронезависимое сопоставление [`String`](/ru/reference/data-types/string) или [`(U)Int*`](/ru/reference/data-types/int-uint)

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

Возвращает исходную JSON-строку извлечённого элемента. [`String`](/ru/reference/data-types/string)

**Примеры**

**объект**

```sql title=Query theme={null}
SELECT JSONExtractRawCaseInsensitive('{"Object": {"key": "value"}}', 'OBJECT')
```

```response title=Response theme={null}
{"key":"value"}
```

<div id="JSONExtractString">
  ## JSONExtractString
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONExtractString(json[, indices_or_keys, ...])
```

**Аргументы**

* `json` — JSON-строка для разбора. [`String`](/ru/reference/data-types/string)
* `indices_or_keys` — Список из нуля или более аргументов, каждый из которых может быть либо строкой, либо целым числом. [`String`](/ru/reference/data-types/string) или [`(U)Int*`](/ru/reference/data-types/int-uint)

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

Возвращает значение типа String, если оно существует; в противном случае возвращает пустую строку. [`String`](/ru/reference/data-types/string)

**Примеры**

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

```sql title=Query theme={null}
SELECT JSONExtractString('{"a": "hello", "b": [-100, 200.0, 300]}', 'a') AS res;
```

```response title=Response theme={null}
┌─res───┐
│ hello │
└───────┘
```

<div id="JSONExtractStringCaseInsensitive">
  ## JSONExtractStringCaseInsensitive
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONExtractStringCaseInsensitive(json [, indices_or_keys]...)
```

**Аргументы**

* `json` — JSON-строка для разбора [`String`](/ru/reference/data-types/string)
* `indices_or_keys` — Необязательно. Индексы или ключи для перехода к нужному полю. Для ключей используется регистронезависимое сопоставление [`String`](/ru/reference/data-types/string) или [`(U)Int*`](/ru/reference/data-types/int-uint)

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

Возвращает извлечённое строковое значение или пустую строку, если ничего не найдено. [`String`](/ru/reference/data-types/string)

**Примеры**

**базовый**

```sql title=Query theme={null}
SELECT JSONExtractStringCaseInsensitive('{"ABC": "def"}', 'abc')
```

```response title=Response theme={null}
def
```

**вложенный**

```sql title=Query theme={null}
SELECT JSONExtractStringCaseInsensitive('{"User": {"Name": "John"}}', 'user', 'name')
```

```response title=Response theme={null}
John
```

<div id="JSONExtractUInt">
  ## JSONExtractUInt
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONExtractUInt(json [, indices_or_keys, ...])
```

**Аргументы**

* `json` — JSON-строка для разбора. [`String`](/ru/reference/data-types/string)
* `indices_or_keys` — Список из нуля, одного или нескольких аргументов, каждый из которых может быть строкой или целым числом. [`String`](/ru/reference/data-types/string) или [`(U)Int*`](/ru/reference/data-types/int-uint)

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

Возвращает значение UInt, если оно существует; в противном случае возвращает `0`. [`UInt64`](/ru/reference/data-types/int-uint)

**Примеры**

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

```sql title=Query theme={null}
SELECT JSONExtractUInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', -1) AS res;
```

```response title=Response theme={null}
┌─res─┐
│ 300 │
└─────┘
```

<div id="JSONExtractUIntCaseInsensitive">
  ## JSONExtractUIntCaseInsensitive
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONExtractUIntCaseInsensitive(json [, indices_or_keys]...)
```

**Аргументы**

* `json` — JSON-строка для разбора [`String`](/ru/reference/data-types/string)
* `indices_or_keys` — Необязательно. Индексы или ключи для перехода к полю. Ключи используют регистронезависимое сопоставление [`String`](/ru/reference/data-types/string) или [`(U)Int*`](/ru/reference/data-types/int-uint)

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

Возвращает извлечённое значение типа UInt; `0`, если значение не найдено или его невозможно преобразовать. [`UInt64`](/ru/reference/data-types/int-uint)

**Примеры**

**базовый**

```sql title=Query theme={null}
SELECT JSONExtractUIntCaseInsensitive('{"COUNT": 789}', 'count')
```

```response title=Response theme={null}
789
```

<div id="JSONHas">
  ## JSONHas
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONHas(json[ ,indices_or_keys, ...])
```

**Аргументы**

* `json` — JSON-строка для разбора [`String`](/ru/reference/data-types/string)
* `[ ,indices_or_keys, ...]` — Список из нуля или более аргументов. [`String`](/ru/reference/data-types/string) или [`(U)Int*`](/ru/reference/data-types/int-uint)

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

Возвращает `1`, если значение присутствует в `json`, в противном случае — `0` [`UInt8`](/ru/reference/data-types/int-uint)

**Примеры**

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

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

```response title=Response theme={null}
1
0
```

<div id="JSONKey">
  ## JSONKey
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONKey(json[, indices_or_keys, ...])
```

**Аргументы**

* `json` — JSON-строка для разбора. [`String`](/ru/reference/data-types/string)
* `indices_or_keys` — Необязательный список индексов или ключей, указывающий путь к вложенному элементу. Каждый argument может быть либо строкой (доступ по ключу), либо целым числом (доступ по индексу, начиная с 1). [`String`](/ru/reference/data-types/string) или [`Int*`](/ru/reference/data-types/int-uint)

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

Возвращает имя ключа в указанной позиции объекта JSON. [`String`](/ru/reference/data-types/string)

**Примеры**

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

```sql title=Query theme={null}
SELECT JSONKey('{"a": "hello", "b": [-100, 200.0, 300]}', 1);
```

```response title=Response theme={null}
a
```

<div id="JSONLength">
  ## JSONLength
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONLength(json [, indices_or_keys, ...])
```

**Аргументы**

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

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

Возвращает длину JSON-массива или объекта JSON; в противном случае возвращает `0`, если значение отсутствует или имеет неверный тип. [`UInt64`](/ru/reference/data-types/int-uint)

**Примеры**

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

```sql title=Query theme={null}
SELECT JSONLength('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 3;
SELECT JSONLength('{"a": "hello", "b": [-100, 200.0, 300]}') = 2;
```

```response title=Response theme={null}
1
1
```

<div id="JSONMergePatch">
  ## JSONMergePatch
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONMergePatch(json1[, json2, ...])
```

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

**Аргументы**

* `json1[, json2, ...]` — Одна или несколько строк с корректным JSON. [`String`](/ru/reference/data-types/string)

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

Возвращает строку с объединённым объектом JSON, если строки объектов JSON корректны. [`String`](/ru/reference/data-types/string)

**Примеры**

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

```sql title=Query theme={null}
SELECT JSONMergePatch('{"a":1}', '{"name": "joey"}', '{"name": "tom"}', '{"name": "zoey"}') AS res;
```

```response title=Response theme={null}
┌─res───────────────────┐
│ {"a":1,"name":"zoey"} │
└───────────────────────┘
```

<div id="JSONSharedDataPaths">
  ## JSONSharedDataPaths
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONSharedDataPaths(json)
```

**Аргументы**

* `json` — JSON-столбец. [`JSON`](/ru/reference/data-types/newjson)

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

Возвращает массив путей, хранящихся в общей структуре данных JSON-столбца. [`Array(String)`](/ru/reference/data-types/array)

**Примеры**

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

```sql title=Query theme={null}
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;
```

```response title=Response theme={null}
┌─json─────────────────────────────────┬─JSONSharedDataPaths(json)─┐
│ {"a":"42"}                           │ []                        │
│ {"b":"Hello"}                        │ ['b']                     │
│ {"a":["1","2","3"],"c":"2020-01-01"} │ ['c']                     │
└──────────────────────────────────────┴───────────────────────────┘
```

<div id="JSONSharedDataPathsWithTypes">
  ## JSONSharedDataPathsWithTypes
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONSharedDataPathsWithTypes(json)
```

**Аргументы**

* `json` — JSON-столбец. [`JSON`](/ru/reference/data-types/newjson)

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

Возвращает отображение путей, хранящихся в общей структуре данных, и соответствующих им типов данных в JSON-столбце. [`Map(String, String)`](/ru/reference/data-types/map)

**Примеры**

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

```sql title=Query theme={null}
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;
```

```response title=Response theme={null}
┌─json─────────────────────────────────┬─JSONSharedDataPathsWithTypes(json)─┐
│ {"a":"42"}                           │ {}                                  │
│ {"b":"Hello"}                        │ {'b':'String'}                      │
│ {"a":["1","2","3"],"c":"2020-01-01"} │ {'c':'Date'}                        │
└──────────────────────────────────────┴─────────────────────────────────────┘
```

<div id="JSONType">
  ## JSONType
</div>

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

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

**Синтаксис**

```sql theme={null}
JSONType(json[, indices_or_keys, ...])
```

**Аргументы**

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

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

Возвращает тип значения JSON в виде строки; если значение не существует, возвращает `Null=0` [`Enum`](/ru/reference/data-types/enum)

**Примеры**

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

```sql title=Query theme={null}
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';
```

```response title=Response theme={null}
1
1
1
```

<div id="JSON_EXISTS">
  ## JSON\_EXISTS
</div>

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

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

**Синтаксис**

```sql theme={null}
JSON_EXISTS(json, path)
```

**Аргументы**

* `json` — Строка с корректным JSON. [`String`](/ru/reference/data-types/string)
* `path` — Строка, представляющая путь. [`String`](/ru/reference/data-types/string)

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

Возвращает `1`, если значение существует в JSON-документе, иначе — `0`. [`UInt8`](/ru/reference/data-types/int-uint)

**Примеры**

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

```sql title=Query theme={null}
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]');
```

```response title=Response theme={null}
┌─JSON_EXISTS(⋯ '$.hello')─┐
│                        1 │
└──────────────────────────┘
┌─JSON_EXISTS(⋯llo.world')─┐
│                        1 │
└──────────────────────────┘
┌─JSON_EXISTS(⋯.hello[*]')─┐
│                        1 │
└──────────────────────────┘
┌─JSON_EXISTS(⋯.hello[0]')─┐
│                        1 │
└──────────────────────────┘
```

<div id="JSON_QUERY">
  ## JSON\_QUERY
</div>

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

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

**Синтаксис**

```sql theme={null}
JSON_QUERY(json, path)
```

**Аргументы**

* `json` — Строка с корректным JSON. [`String`](/ru/reference/data-types/string)
* `path` — Строка, задающая путь. [`String`](/ru/reference/data-types/string)

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

Возвращает извлечённый JSON-массив или объект JSON в виде строки либо пустую строку, если значение отсутствует. [`String`](/ru/reference/data-types/string)

**Примеры**

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

```sql title=Query theme={null}
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'));
```

```response title=Response theme={null}
["world"]
[0, 1, 4, 0, -1, -4]
[2]
String
```

<div id="JSON_VALUE">
  ## JSON\_VALUE
</div>

Добавленный в: 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` возвращается сложное значение.

**Синтаксис**

```sql theme={null}
JSON_VALUE(json, path)
```

**Аргументы**

* `json` — Строка с корректным JSON. [`String`](/ru/reference/data-types/string)
* `path` — Строка, задающая путь. [`String`](/ru/reference/data-types/string)

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

Возвращает извлечённое скалярное значение JSON в виде строки или пустую строку, если значение отсутствует. [`String`](/ru/reference/data-types/string)

**Примеры**

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

```sql title=Query theme={null}
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;
```

```response title=Response theme={null}
world
0
2
ᴺᵁᴸᴸ
```

<div id="dynamicElement">
  ## dynamicElement
</div>

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

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

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

**Синтаксис**

```sql theme={null}
dynamicElement(dynamic, type_name)
```

**Аргументы**

* `dynamic` — столбец типа Dynamic, из которого извлекаются значения. [`Dynamic`](/ru/reference/data-types/dynamic)
* `type_name` — имя типа варианта, который нужно извлечь (например, 'String', 'Int64', 'Array(Int64)').

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

Возвращает значения указанного типа из столбца типа Dynamic. Для несовпадающих типов возвращает NULL (или пустой массив для типов массива). [`Any`](/ru/reference/data-types)

**Примеры**

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

```sql title=Query theme={null}
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
```

```response title=Response theme={null}
┌─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]                           │                      ᴺᵁᴸᴸ │ []                                 │
└───────────────┴────────────────┴─────────────────────────────┴────────────────────────────┴───────────────────────────────────┴───────────────────────────┴────────────────────────────────────┘
```

<div id="dynamicType">
  ## dynamicType
</div>

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

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

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

**Синтаксис**

```sql theme={null}
dynamicType(dynamic)
```

**Аргументы**

* `dynamic` — столбец типа Dynamic для анализа. [`Dynamic`](/ru/reference/data-types/dynamic)

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

Возвращает имя типа значения, хранящегося в каждой строке, или 'None' для значений NULL. [`String`](/ru/reference/data-types/string)

**Примеры**

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

```sql title=Query theme={null}
CREATE TABLE test (d Dynamic) ENGINE = Memory;
INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]);
SELECT d, dynamicType(d) FROM test;
```

```response title=Response theme={null}
┌─d─────────────┬─dynamicType(d)─┐
│ ᴺᵁᴸᴸ          │ None           │
│ 42            │ Int64          │
│ Hello, World! │ String         │
│ [1,2,3]       │ Array(Int64)   │
└───────────────┴────────────────┘
```

<div id="isDynamicElementInSharedData">
  ## isDynamicElementInSharedData
</div>

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

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

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

**Синтаксис**

```sql theme={null}
isDynamicElementInSharedData(dynamic)
```

**Аргументы**

* `dynamic` — столбец типа Dynamic для анализа. [`Dynamic`](/ru/reference/data-types/dynamic)

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

Возвращает true, если значение хранится в общем формате Variant, и false, если оно хранится как отдельный подстолбец или равно NULL. [`Bool`](/ru/reference/data-types/boolean)

**Примеры**

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

```sql title=Query theme={null}
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;
```

```response title=Response theme={null}
┌─d─────────────┬─isDynamicElementInSharedData(d)─┐
│ ᴺᵁᴸᴸ          │ false                           │
│ 42            │ false                           │
│ Hello, World! │ true                            │
│ [1,2,3]       │ true                            │
└───────────────┴─────────────────────────────────┘
```

<div id="isValidJSON">
  ## isValidJSON
</div>

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

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

**Синтаксис**

```sql theme={null}
isValidJSON(json)
```

**Аргументы**

* `json` — строка JSON, которую нужно проверить [`String`](/ru/reference/data-types/string)

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

Возвращает `1`, если строка содержит корректный JSON, иначе `0`. [`UInt8`](/ru/reference/data-types/int-uint)

**Примеры**

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

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

```response title=Response theme={null}
1
0
```

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

```sql title=Query theme={null}
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);
```

```response title=Response theme={null}
0
1
1
1
1
1
0
```

<div id="simpleJSONExtractBool">
  ## simpleJSONExtractBool
</div>

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

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

**Синтаксис**

```sql theme={null}
simpleJSONExtractBool(json, field_name)
```

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

**Аргументы**

* `json` — JSON, в котором выполняется поиск поля. [`String`](/ru/reference/data-types/string)
* `field_name` — Имя искомого поля. [`const String`](/ru/reference/data-types/string)

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

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

* Если поле не существует.
* Если поле содержит `true` в виде строки, например: `{"field":"true"}`.
* Если поле содержит `1` в виде числового значения. [`UInt8`](/ru/reference/data-types/int-uint)

**Примеры**

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

```sql title=Query theme={null}
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;
```

```response title=Response theme={null}
0
1
0
0
```

<div id="simpleJSONExtractFloat">
  ## simpleJSONExtractFloat
</div>

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

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

**Синтаксис**

```sql theme={null}
simpleJSONExtractFloat(json, field_name)
```

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

**Аргументы**

* `json` — JSON, в котором ищется поле. [`String`](/ru/reference/data-types/string)
* `field_name` — Имя искомого поля. [`const String`](/ru/reference/data-types/string)

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

Возвращает число, разобранное из значения поля, если поле существует и содержит число; в противном случае — `0`. [`Float64`](/ru/reference/data-types/float)

**Примеры**

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

```sql title=Query theme={null}
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;
```

```response title=Response theme={null}
0
-4000
0
-3.4
5
```

<div id="simpleJSONExtractInt">
  ## simpleJSONExtractInt
</div>

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

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

**Синтаксис**

```sql theme={null}
simpleJSONExtractInt(json, field_name)
```

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

**Аргументы**

* `json` — JSON, в котором выполняется поиск поля. [`String`](/ru/reference/data-types/string)
* `field_name` — Имя искомого поля. [`const String`](/ru/reference/data-types/string)

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

Возвращает число, разобранное из поля, если поле существует и содержит число, в противном случае возвращает `0` [`Int64`](/ru/reference/data-types/int-uint)

**Примеры**

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

```sql title=Query theme={null}
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;
```

```response title=Response theme={null}
0
-4
0
-3
5
```

<div id="simpleJSONExtractRaw">
  ## simpleJSONExtractRaw
</div>

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

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

**Синтаксис**

```sql theme={null}
simpleJSONExtractRaw(json, field_name)
```

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

**Аргументы**

* `json` — JSON, в котором выполняется поиск поля. [`String`](/ru/reference/data-types/string)
* `field_name` — Имя искомого поля. [`const String`](/ru/reference/data-types/string)

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

Возвращает значение поля в виде строки, включая разделители, если поле существует; в противном случае возвращается пустая строка [`String`](/ru/reference/data-types/string)

**Примеры**

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

```sql title=Query theme={null}
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;
```

```response title=Response theme={null}
"-4e3"
-3.4
5
{"def":[1,2,3]}
```

<div id="simpleJSONExtractString">
  ## simpleJSONExtractString
</div>

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

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

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

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

**Синтаксис**

```sql theme={null}
simpleJSONExtractString(json, field_name)
```

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

**Аргументы**

* `json` — JSON, в котором выполняется поиск поля. [`String`](/ru/reference/data-types/string)
* `field_name` — Имя поля, которое нужно найти. [`const String`](/ru/reference/data-types/string)

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

Возвращает неэкранированное значение поля в виде строки, включая разделители. Если поле не содержит строку в двойных кавычках, не удаётся снять экранирование или поле не существует, возвращается пустая строка [`String`](/ru/reference/data-types/string)

**Примеры**

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

```sql title=Query theme={null}
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;
```

```response title=Response theme={null}
\n\0

☺
```

<div id="simpleJSONExtractUInt">
  ## simpleJSONExtractUInt
</div>

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

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

**Синтаксис**

```sql theme={null}
simpleJSONExtractUInt(json, field_name)
```

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

**Аргументы**

* `json` — JSON, в котором выполняется поиск поля. [`String`](/ru/reference/data-types/string)
* `field_name` — Имя искомого поля. [`const String`](/ru/reference/data-types/string)

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

Возвращает число, разобранное из поля, если поле существует и содержит число; в противном случае — `0` [`UInt64`](/ru/reference/data-types/int-uint)

**Примеры**

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

```sql title=Query theme={null}
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;
```

```response title=Response theme={null}
0
4
0
3
5
```

<div id="simpleJSONHas">
  ## simpleJSONHas
</div>

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

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

**Синтаксис**

```sql theme={null}
simpleJSONHas(json, field_name)
```

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

**Аргументы**

* `json` — JSON, в котором ищется поле. [`String`](/ru/reference/data-types/string)
* `field_name` — Имя искомого поля. [`const String`](/ru/reference/data-types/string)

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

Возвращает `1`, если поле существует, иначе — `0` [`UInt8`](/ru/reference/data-types/int-uint)

**Примеры**

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

```sql title=Query theme={null}
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;
```

```response title=Response theme={null}
1
0
```

<div id="toJSONString">
  ## toJSONString
</div>

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

Сериализует значение в JSON-представление. Поддерживаются различные типы данных и вложенные структуры.
64-битные [целые числа](/ru/reference/data-types/int-uint) и более крупные (например, `UInt64` или `Int128`) по умолчанию заключаются в кавычки. Это поведение контролируется параметром [output\_format\_json\_quote\_64bit\_integers](/ru/reference/settings/formats#output_format_json_quote_64bit_integers).
Специальные значения `NaN` и `inf` заменяются на `null`. Чтобы они отображались, включите настройку [output\_format\_json\_quote\_denormals](/ru/reference/settings/formats#output_format_json_quote_denormals).
При сериализации значения [Enum](/ru/reference/data-types/enum) функция выводит его имя.

См. также:

* [output\_format\_json\_quote\_64bit\_integers](/ru/reference/settings/formats#output_format_json_quote_64bit_integers)
* [output\_format\_json\_quote\_denormals](/ru/reference/settings/formats#output_format_json_quote_denormals)

**Синтаксис**

```sql theme={null}
toJSONString(value)
```

**Аргументы**

* `value` — Значение для сериализации. Значение может быть любого типа данных. [`Any`](/ru/reference/data-types)

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

Возвращает JSON-представление значения. [`String`](/ru/reference/data-types/string)

**Примеры**

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

```sql title=Query theme={null}
SELECT toJSONString(map('key1', 1, 'key2', 2));
```

```response title=Response theme={null}
┌─toJSONString(map('key1', 1, 'key2', 2))─┐
│ {"key1":1,"key2":2}                     │
└─────────────────────────────────────────┘
```

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

```sql title=Query theme={null}
SELECT toJSONString(tuple(1.25, NULL, NaN, +inf, -inf, [])) SETTINGS output_format_json_quote_denormals = 1;
```

```response title=Response theme={null}
┌─toJSONString(tuple(1.25, NULL, NaN, plus(inf), minus(inf), []))─┐
│ [1.25,null,"nan","inf","-inf",[]]                               │
└─────────────────────────────────────────────────────────────────┘
```
