> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.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をパースする関数は、次の2種類に分かれます。

* [`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>

これらの関数は、JSON オブジェクトから値を抽出する際に、ASCII におけるキーの大文字・小文字を区別しない照合を行います。
動作は大文字・小文字を区別する対応する関数と同じですが、オブジェクトのキーは大文字・小文字に関係なく照合されます。
大文字・小文字だけが異なる複数のキーに一致した場合は、最初に一致したものが返されます。

<Note>
  これらの関数は大文字・小文字を区別する対応する関数よりもパフォーマンスが低下する場合があるため、可能であれば通常の JSONExtract 関数を使用してください。
</Note>

{/*AUTOGENERATED_START*/}

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

導入バージョン: v24.8.0

JSONカラムの各行に格納されているすべてのパスの一覧を返します。

**構文**

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

**引数**

* `json` — JSONカラム。[`JSON`](/ja/reference/data-types/newjson)

**戻り値**

JSONカラムに含まれるすべてのパスの配列を返します。[`Array(String)`](/ja/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`](/ja/reference/data-types/newjson)

**戻り値**

JSONカラム内のすべてのパスと、それぞれのデータ型のマップを返します。[`Map(String, String)`](/ja/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`](/ja/reference/data-types/newjson)

**戻り値**

JSONカラム内のすべての値を文字列として格納した配列を返します。[`Array(String)`](/ja/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配列に含まれる要素数を返します。
入力されたJSON文字列が無効な場合、この関数は`NULL`を返します。

**構文**

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

**別名**: `JSON_ARRAY_LENGTH`

**引数**

* `json` — 有効な JSON を表す String。[`String`](/ja/reference/data-types/string)

**戻り値**

`json` が有効な JSON 配列を表す文字列である場合は配列要素数を返し、そうでない場合は `NULL` を返します。[`Nullable(UInt64)`](/ja/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`](/ja/reference/data-types/newjson)

**戻り値**

JSONカラム内の動的パスの配列を返します。[`Array(String)`](/ja/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`](/ja/reference/data-types/newjson)

**戻り値**

JSONカラム内の動的なパスとそのデータ型のマップを返します。 [`Map(String, String)`](/ja/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`](/ja/reference/data-types/string)
* `indices_or_keys` — 0 個以上の引数からなるリストで、各要素には文字列または整数を指定できます。[`String`](/ja/reference/data-types/string) または [`(U)Int*`](/ja/reference/data-types/int-uint)
* `return_type` — 返す ClickHouse のデータ型。[`String`](/ja/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 array の各要素を、未解析の文字列として表した配列を返します。

**構文**

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

**引数**

* `json` — パース対象の JSON 文字列。[`String`](/ja/reference/data-types/string)
* `indices_or_keys` — 0 個以上の引数からなるリストで、各引数には文字列または整数のいずれかを指定できます。[`String`](/ja/reference/data-types/string) または [`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

JSON 配列の要素を含む文字列の配列を返します。指定した部分が配列でない場合、または存在しない場合は、空の配列を返します。[`Array(String)`](/ja/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`](/ja/reference/data-types/string)
* `indices_or_keys` — 任意。配列までたどるためのインデックスまたはキー。キーの大文字・小文字を区別しない照合 [`String`](/ja/reference/data-types/string) または [`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

生の JSON 文字列の配列を返します。 [`Array(String)`](/ja/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`](/ja/reference/data-types/string)
* `indices_or_keys` — 0 個以上の引数からなるリストで、各引数には文字列または整数を指定できます。 [`String`](/ja/reference/data-types/string) または [`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

値が存在する場合は Bool 値を返し、存在しない場合は `0` を返します。 [`Bool`](/ja/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`](/ja/reference/data-types/string)
* `indices_or_keys` — 任意。フィールドに到達するためのインデックスまたはキー。キーの大文字・小文字を区別しない照合 [`String`](/ja/reference/data-types/string) または [`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

抽出したブール値を返します (true の場合は 1、false の場合は 0) 。見つからない場合は 0 を返します。[`UInt8`](/ja/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`](/ja/reference/data-types/string)
* `indices_or_keys` — 任意。フィールドにアクセスするためのインデックスまたはキー。キーの大文字・小文字を区別しない照合 [`String`](/ja/reference/data-types/string) または [`(U)Int*`](/ja/reference/data-types/int-uint)
* `return_type` — 抽出する ClickHouse のデータ型 [`String`](/ja/reference/data-types/string)

**戻り値**

指定したデータ型で抽出した値を返します。[`Any`](/ja/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`](/ja/reference/data-types/string)
* `indices_or_keys` — 0 個以上の引数からなるリストで、各引数には文字列または整数を指定できます。 [`String`](/ja/reference/data-types/string) または [`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

値が存在する場合は Float 値を返し、存在しない場合は `0` を返します。 [`Float64`](/ja/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`](/ja/reference/data-types/string)
* `indices_or_keys` — 任意。フィールドにたどり着くためのインデックスまたはキー。キーの大文字・小文字を区別しない照合 [`String`](/ja/reference/data-types/string) または [`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

抽出された Float 値を返します。見つからない場合、または変換できない場合は 0 を返します。 [`Float64`](/ja/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`](/ja/reference/data-types/string)
* `indices_or_keys` — 0 個以上の引数からなるリストで、各引数には文字列または整数を指定できます。 [`String`](/ja/reference/data-types/string) または [`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

値が存在する場合は Int 値を返し、存在しない場合は `0` を返します。 [`Int64`](/ja/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`](/ja/reference/data-types/string)
* `indices_or_keys` — オプション。フィールドまでたどるためのインデックスまたはキー。キーの大文字・小文字を区別しない照合 [`String`](/ja/reference/data-types/string) または [`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

抽出された Int 値を返します。見つからない場合、または変換できない場合は 0 を返します。 [`Int64`](/ja/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`](/ja/reference/data-types/string)
* `indices_or_keys` — 0 個以上の引数のリストで、各引数は文字列または整数のいずれかです。 [`String`](/ja/reference/data-types/string) または [`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

JSONオブジェクトのキーを含む配列を返します。 [`Array(String)`](/ja/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

値が指定した ClickHouse のデータ型である JSON から、キーと値のペアを解析します。

**構文**

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

**引数**

* `json` — パースする JSON 文字列。[`String`](/ja/reference/data-types/string)
* `indices_or_keys` — 0 個以上の引数を指定でき、各引数には文字列または整数を指定できます。[`String`](/ja/reference/data-types/string) または [`(U)Int*`](/ja/reference/data-types/int-uint)
* `value_type` — 値の ClickHouse データ型。[`String`](/ja/reference/data-types/string)

**戻り値**

パースされたキー・バリューのペアからなるタプルの配列を返します。[`Array(Tuple(String, value_type))`](/ja/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`](/ja/reference/data-types/string)
* `indices_or_keys` — 任意。オブジェクト内をたどるためのインデックスまたはキー。キーの大文字・小文字を区別しない照合 [`String`](/ja/reference/data-types/string) または [`(U)Int*`](/ja/reference/data-types/int-uint)
* `value_type` — 値の ClickHouse データ型 [`String`](/ja/reference/data-types/string)

**戻り値**

キー・バリューのペアからなるタプルの配列を返します。 [`Array(Tuple(String, T))`](/ja/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

JSON オブジェクト のキーと値を含む タプル の Array を返します。すべての値は、解析されていない文字列として表されます。

**構文**

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

**引数**

* `json` — パース対象の JSON 文字列。[`String`](/ja/reference/data-types/string)
* `indices_or_keys` — 0 個以上の引数からなるリストで、各引数には文字列または整数のいずれかを指定できます。[`String`](/ja/reference/data-types/string) または [`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

値が未パースの文字列である、パース済みのキー・バリューのペアからなるタプルの配列を返します。[`Array(Tuple(String, String))`](/ja/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` — parse する JSON 文字列 [`String`](/ja/reference/data-types/string)
* `indices_or_keys` — 任意。オブジェクトにたどるためのインデックスまたはキー。キーの大文字・小文字を区別しない照合 [`String`](/ja/reference/data-types/string) または [`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

キー・バリューのペアを生の文字列として含む Tuple の配列を返します。 [`Array(Tuple(String, String))`](/ja/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`](/ja/reference/data-types/string)
* `indices_or_keys` — 省略可。オブジェクト内をたどるためのインデックスまたはキー。キーの大文字・小文字を区別しない照合 [`String`](/ja/reference/data-types/string) または [`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

JSONオブジェクトのキーの配列を返します。 [`Array(String)`](/ja/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`](/ja/reference/data-types/string)
* `indices_or_keys` — 0 個以上の引数からなるリストで、各引数には文字列または整数を指定できます。[`String`](/ja/reference/data-types/string) または [`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

JSON の一部を、パースされていない文字列として返します。その部分が存在しない場合、または型が正しくない場合は、空文字列が返されます。[`String`](/ja/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`](/ja/reference/data-types/string)
* `indices_or_keys` — 省略可。フィールドにたどり着くためのインデックスまたはキー。キーの照合では大文字と小文字は区別されません [`String`](/ja/reference/data-types/string) または [`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

抽出された要素の生の JSON 文字列を返します。 [`String`](/ja/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`](/ja/reference/data-types/string)
* `indices_or_keys` — 0 個以上の引数からなるリストで、各引数には文字列または整数を指定できます。 [`String`](/ja/reference/data-types/string) または [`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

値が存在する場合は String 値を返し、存在しない場合は空文字列を返します。 [`String`](/ja/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`](/ja/reference/data-types/string)
* `indices_or_keys` — 任意。フィールドに到達するためのインデックスまたはキー。キーは大文字と小文字を区別せずに照合されます [`String`](/ja/reference/data-types/string) または [`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

抽出された文字列値を返します。見つからない場合は空文字列を返します。 [`String`](/ja/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`](/ja/reference/data-types/string)
* `indices_or_keys` — 0 個以上の引数のリストで、各引数は文字列または整数のいずれかです。 [`String`](/ja/reference/data-types/string) または [`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

存在する場合は UInt 値を返し、存在しない場合は `0` を返します。 [`UInt64`](/ja/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`](/ja/reference/data-types/string)
* `indices_or_keys` — 任意。フィールドまでたどるためのインデックスまたはキー。キーの照合では大文字と小文字を区別しません [`String`](/ja/reference/data-types/string) または [`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

抽出された UInt 値を返します。見つからない場合、または変換できない場合は `0` を返します。 [`UInt64`](/ja/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`](/ja/reference/data-types/string)
* `[ ,indices_or_keys, ...]` — 0 個以上の引数の一覧。 [`String`](/ja/reference/data-types/string) または [`(U)Int*`](/ja/reference/data-types/int-uint)

**戻り値**

値が `json` 内に存在する場合は `1`、存在しない場合は `0` を返します [`UInt8`](/ja/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 が文字列として渡された場合は、まずパースされます。2 番目の引数は、ネストされたオブジェクト内をたどるための JSON パスです。この関数は、指定した位置にあるキー名を返します。

**構文**

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

**引数**

* `json` — 解析対象の JSON 文字列。[`String`](/ja/reference/data-types/string)
* `indices_or_keys` — ネストされた要素へのパスを指定する、省略可能な索引またはキーのリスト。各引数には、文字列 (キーによるアクセス) または整数 (1 から始まる索引によるアクセス) のいずれかを指定できます。[`String`](/ja/reference/data-types/string) または [`Int*`](/ja/reference/data-types/int-uint)

**戻り値**

JSONオブジェクト内の指定した位置にあるキー名を返します。[`String`](/ja/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`](/ja/reference/data-types/string)
* `[, indices_or_keys, ...]` — 任意。0 個以上の引数のリスト。[`String`](/ja/reference/data-types/string) または [`(U)Int8/16/32/64`](/ja/reference/data-types/int-uint)

**戻り値**

JSON 配列または JSON オブジェクトの長さを返します。値が存在しないか、型が異なる場合は `0` を返します。[`UInt64`](/ja/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 を含む文字列を1つ以上指定します。[`String`](/ja/reference/data-types/string)

**戻り値**

JSON オブジェクト文字列が有効な場合、マージされた JSON オブジェクト文字列を返します。[`String`](/ja/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`](/ja/reference/data-types/newjson)

**戻り値**

JSONカラムの共有データ構造に格納されているパスの配列を返します。[`Array(String)`](/ja/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`](/ja/reference/data-types/newjson)

**戻り値**

共有データ構造に格納されたパスと、JSONカラム内におけるそれらのデータ型の対応を表すマップを返します。[`Map(String, String)`](/ja/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`](/ja/reference/data-types/string)
* `json[, indices_or_keys, ...]` — 0 個以上の引数のリストで、各引数には文字列または整数を指定できます。[`String`](/ja/reference/data-types/string) または [`(U)Int8/16/32/64`](/ja/reference/data-types/int-uint)

**戻り値**

JSON 値の型を文字列として返します。値が存在しない場合は `Null=0` を返します。[`Enum`](/ja/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`](/ja/reference/data-types/string)
* `path` — パスを表す文字列。[`String`](/ja/reference/data-types/string)

**戻り値**

JSON ドキュメント内に値が存在する場合は `1` を、存在しない場合は `0` を返します。[`UInt8`](/ja/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`](/ja/reference/data-types/string)
* `path` — パスを表す文字列。[`String`](/ja/reference/data-types/string)

**戻り値**

抽出された JSON 配列または JSON オブジェクトを文字列として返します。値が存在しない場合は空文字列を返します。[`String`](/ja/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`](/ja/reference/data-types/string)
* `path` — パスを表す文字列です。[`String`](/ja/reference/data-types/string)

**戻り値**

抽出された JSON のスカラー値を文字列として返します。値が存在しない場合は空文字列を返します。[`String`](/ja/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、配列型では空の配列を返します。

**構文**

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

**引数**

* `dynamic` — 抽出元の Dynamic カラム。[`Dynamic`](/ja/reference/data-types/dynamic)
* `type_name` — 抽出する Variant 型の名前 (例: 'String'、'Int64'、'Array(Int64)') 。

**戻り値**

Dynamic カラムから指定した型の値を返します。一致しない型の場合は NULL を返します (配列型の場合は空の配列) 。[`Any`](/ja/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` カラムの各行について、その Variant 型の型名を返します。

NULL を含む行では、この関数は 'None' を返します。それ以外のすべての行では、Dynamic カラムのその行に格納されている実際のデータ型
(例: 'Int64'、'String'、'Array(Int64)') を返します。

**構文**

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

**引数**

* `dynamic` — 調査対象の Dynamic カラム。[`Dynamic`](/ja/reference/data-types/dynamic)

**戻り値**

各行に格納された値の型名を返します。NULL 値の場合は 'None' を返します。[`String`](/ja/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

個別のサブカラムではなく、共有 variant フォーマットに格納されている Dynamic カラムの行に対して true を返します。

Dynamic カラムに `max_types` の制限がある場合、この制限を超える値は、個別の型付きサブカラムに分離されるのではなく、共有バイナリフォーマットで格納されます。この関数は、どの行がこの共有フォーマットで格納されているかを判別します。

**構文**

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

**引数**

* `dynamic` — 調査対象の Dynamic カラム。[`Dynamic`](/ja/reference/data-types/dynamic)

**戻り値**

値が共有 Variant フォーマットで格納されている場合は true、個別のサブカラムとして格納されている場合、または NULL の場合は false を返します。[`Bool`](/ja/reference/data-types/boolean)

**例**

**max\_types の制限がある Dynamic カラムで格納フォーマットを確認する**

```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`](/ja/reference/data-types/string)

**戻り値**

文字列が有効な JSON の場合は `1`、そうでない場合は `0` を返します。 [`UInt8`](/ja/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

`field_name` という名前のフィールドの値から true/false の値を解析します。
結果は `UInt8` 型です。

**構文**

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

**別名**: `visitParamExtractBool`

**引数**

* `json` — フィールドを検索する対象の JSON。[`String`](/ja/reference/data-types/string)
* `field_name` — 検索するフィールド名。[`const String`](/ja/reference/data-types/string)

**戻り値**

フィールドの値が `true` の場合は `1` を返し、それ以外の場合は `0` を返します。つまり、この関数は、少なくとも次のような場合に `0` を返します。

* フィールドが存在しない場合。
* フィールドの値が文字列の `true` である場合 (例: `{"field":"true"}`) 。
* フィールドの値が数値の `1` である場合。[`UInt8`](/ja/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

`field_name` という名前のフィールドの値から `Float64` を抽出します。
`field_name` が文字列フィールドの場合は、文字列の先頭から数値として解釈しようとします。
フィールドが存在しない場合、または存在していても数値が含まれていない場合は、`0` を返します。

**構文**

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

**別名**: `visitParamExtractFloat`

**引数**

* `json` — フィールドを検索する対象の JSON。 [`String`](/ja/reference/data-types/string)
* `field_name` — 検索するフィールドの名前。 [`const String`](/ja/reference/data-types/string)

**戻り値**

フィールドが存在し、数値が含まれている場合はそのフィールドから解析された数値を返します。存在しない場合、または数値が含まれていない場合は `0` を返します。 [`Float64`](/ja/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

`field_name` という名前のフィールドの値から `Int64` をパースします。
`field_name` が文字列フィールドの場合は、文字列の先頭から数値をパースしようとします。
フィールドが存在しない場合、または存在していても数値が含まれていない場合は、`0` を返します。

**構文**

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

**別名**: `visitParamExtractInt`

**引数**

* `json` — フィールドを検索する対象の JSON。[`String`](/ja/reference/data-types/string)
* `field_name` — 検索するフィールドの名前。[`const String`](/ja/reference/data-types/string)

**戻り値**

フィールドが存在し、その値が数値である場合はそのフィールドから解析した数値を返し、それ以外の場合は `0` を返します。[`Int64`](/ja/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`](/ja/reference/data-types/string)
* `field_name` — 検索するフィールドの名前。[`const String`](/ja/reference/data-types/string)

**戻り値**

フィールドが存在する場合は、そのフィールドの値を区切り文字を含めて文字列として返し、存在しない場合は空文字列を返します。[`String`](/ja/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

`field_name` という名前のフィールドの値から、二重引用符で囲まれた `String` を解析します。

**実装の詳細**

現在、基本多言語面 (BMP) に含まれない `\uXXXX\uYYYY` 形式のコードポイントはサポートされていません (UTF-8 ではなく CESU-8 に変換されます) 。

**構文**

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

**別名**: `visitParamExtractString`

**引数**

* `json` — フィールドを検索する対象の JSON。 [`String`](/ja/reference/data-types/string)
* `field_name` — 検索するフィールド名。 [`const String`](/ja/reference/data-types/string)

**戻り値**

フィールドのエスケープされていない値を、区切り文字を含む文字列として返します。フィールドに二重引用符で囲まれた文字列が含まれていない場合、エスケープ解除に失敗した場合、またはフィールドが存在しない場合は、空文字列を返します。 [`String`](/ja/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

`field_name` という名前のフィールドの値から `UInt64` をパースします。
`field_name` が文字列フィールドの場合は、その文字列の先頭から数値をパースしようとします。
フィールドが存在しない場合、または存在していても数値が含まれていない場合は、`0` を返します。

**構文**

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

**別名**: `visitParamExtractUInt`

**引数**

* `json` — フィールドを検索する対象の JSON。 [`String`](/ja/reference/data-types/string)
* `field_name` — 検索対象のフィールド名。 [`const String`](/ja/reference/data-types/string)

**戻り値**

フィールドが存在し、その値が数値である場合はその数値を返し、それ以外の場合は `0` を返します [`UInt64`](/ja/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`](/ja/reference/data-types/string)
* `field_name` — 検索対象のフィールド名。 [`const String`](/ja/reference/data-types/string)

**戻り値**

フィールドが存在する場合は `1`、存在しない場合は `0` を返します。 [`UInt8`](/ja/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 ビットの [整数](/ja/reference/data-types/int-uint) 以上 (`UInt64` や `Int128` など) は、デフォルトで引用符で囲まれます。[output\_format\_json\_quote\_64bit\_integers](/ja/reference/settings/formats#output_format_json_quote_64bit_integers) でこの動作を制御します。
特殊な値 `NaN` と `inf` は `null` に置き換えられます。これらを表示するには、[output\_format\_json\_quote\_denormals](/ja/reference/settings/formats#output_format_json_quote_denormals) 設定を有効にします。
[Enum](/ja/reference/data-types/enum) 値をシリアライズする場合、この関数はその名前を出力します。

関連項目:

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

**構文**

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

**引数**

* `value` — シリアライゼーションする値です。値には任意のデータ型を指定できます。[`Any`](/ja/reference/data-types)

**戻り値**

値のJSON表現を返します。[`String`](/ja/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",[]]                               │
└─────────────────────────────────────────────────────────────────┘
```
