JSON関数の種類
JSONをパースする関数は、次の2種類に分かれます。
simpleJSON*(visitParam*):JSONの限られたサブセットを非常に高速にパースするための関数です。JSONExtract*:一般的なJSONをパースするための関数です。
simpleJSON (visitParam) 関数
ClickHouse には、簡易 JSON を扱うための特別な関数があります。これらの JSON 関数はすべて、JSON の形式について強い前提を置いています。できるだけ高速に処理するため、必要最小限の処理 בלבדを行うよう設計されています。
前提は次のとおりです。
- フィールド名 (関数の引数) は定数でなければなりません。
- フィールド名は、JSON 内で何らかの正規化された形式でエンコードされている必要があります。たとえば、
simpleJSONHas('{"abc":"def"}', 'abc') = 1ですが、simpleJSONHas('{"\\u0061\\u0062\\u0063":"def"}', 'abc') = 0です。 - フィールドは、ネストの深さに関係なく検索されます。一致するフィールドが複数ある場合は、最初に出現したものが使用されます。
- JSON には、文字列リテラルの外側に空白文字があってはなりません。
JSONExtract 関数
これらの関数は simdjson をベースとしており、より複雑な JSON のパース処理に対応できるよう設計されています。
大文字・小文字を区別しない JSONExtract 関数
これらの関数は、JSON オブジェクトから値を抽出する際に、ASCII におけるキーの大文字・小文字を区別しない照合を行います。 動作は大文字・小文字を区別する対応する関数と同じですが、オブジェクトのキーは大文字・小文字に関係なく照合されます。 大文字・小文字だけが異なる複数のキーに一致した場合は、最初に一致したものが返されます。
JSONPath 構文
JSON_EXISTS、JSON_VALUE、JSON_QUERY 関数は、2 番目の引数として JSONPath
式を受け取ります。ClickHouse では、SQL/JSON 標準 (ISO/IEC TR 19075-6) におおまかに基づく
JSONPath の限定的なサブセットを実装しています。これは、RFC 9535
やその他の一般的な実装よりも意図的に狭い範囲に限定されています。サポートされる演算子を以下に示します。
正式な実装は
src/Functions/JSONPath/Parsers にあります。
サポートされる演算子
| 構文 | 説明 | 例 |
|---|---|---|
$ |
ルート要素。すべてのパスはこれで始まる必要があります。 | $ |
.key |
クォートなしのドット記法によるメンバーアクセス。キーは数字で始めることも、数字だけで構成することもできます。 | $.store.book, $.1key, $.123 |
."key" |
クォート付きのドット記法によるメンバーアクセス。スペースや特殊文字を含むキーに使用します。ダブルクォートまたはバッククォートを使用できます。 | $."foo bar" |
[key] |
クォートなしのブラケット記法によるメンバーアクセス。 | $[hello] |
['key'] |
クォート付きのブラケット記法によるメンバーアクセス。シングルクォート、ダブルクォート、またはバッククォートを使用できます。 | $['foo bar'] |
[n] |
インデックスによるArray要素へのアクセス (0始まり) 。 | $.items[0] |
[n, m, ...] |
複数のArray要素へのアクセス。 | $.items[0, 2, 4] |
[n to m] |
Array要素の範囲。終了インデックス m は含まれません。 |
$.items[0 to 3] |
[*] |
ワイルドカード。Arrayのすべての要素に一致します。 | $.items[*] |
注記:
- 索引と範囲は、同じ角括弧内で組み合わせて使用できます (例:
[0 to 2, 4]) 。 - 索引範囲とワイルドカードは、同じ角括弧内で組み合わせて使用できません (例:
[* , 0]は無効です) 。 - 範囲
[n to m]では、開始インデックスnは終了インデックスmより厳密に小さくなければなりません。そうでない場合は例外が発生します。 - 単独の索引
[n]は、範囲[n to n+1]と同等です。
サポートされていない演算子
RFC 9535 またはその他の実装で利用可能な以下の JSONPath 演算子は、ClickHouse ではサポートされていません。
| 構文 | 説明 |
|---|---|
.. |
再帰的な下降。 |
?(@.expr) |
フィルタ式。 |
[start:end:step] |
スライス表記。代わりに [n to m] を使用してください。 |
@ |
現在のノードへの参照。 |
[-n] |
負の (末尾から数える) 配列インデックス。 |
| スクリプト式 | パス内の算術式または関数式。 |
ON ERROR / ON EMPTY |
エラー時および空の場合の動作を制御する Standard SQL/JSON 句。 |
JSONAllPaths
導入バージョン: v24.8.0
JSONカラムの各行に格納されているすべてのパスの一覧を返します。
構文
JSONAllPaths(json)引数
json— JSONカラム。JSON
戻り値
JSONカラムに含まれるすべてのパスの配列を返します。Array(String)
例
使用例
CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory;
INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}};
SELECT json, JSONAllPaths(json) FROM test;┌─json───────────────────────────┬─JSONAllPaths(json)─┐
│ {"a":42} │ ['a'] │
│ {"b":"Hello"} │ ['b'] │
│ {"a":[1,2,3],"c":"2020-01-01"} │ ['a','c'] │
└────────────────────────────────┴────────────────────┘JSONAllPathsWithTypes
導入バージョン: v24.8.0
JSONカラムの各行に格納されている、すべてのパスとそのデータ型の一覧を返します。
構文
JSONAllPathsWithTypes(json)引数
json— JSONカラム。JSON
戻り値
JSONカラム内のすべてのパスと、それぞれのデータ型のマップを返します。Map(String, String)
例
使用例
CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory;
INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}};
SELECT json, JSONAllPathsWithTypes(json) FROM test;┌─json───────────────────────────┬─JSONAllPathsWithTypes(json)───────────────┐
│ {"a":42} │ {'a':'Int64'} │
│ {"b":"Hello"} │ {'b':'String'} │
│ {"a":[1,2,3],"c":"2020-01-01"} │ {'a':'Array(Nullable(Int64))','c':'Date'} │
└────────────────────────────────┴───────────────────────────────────────────┘JSONAllValues
導入バージョン: v26.4.0
JSONカラムの各行に含まれるすべての値を、文字列の配列として返します。 値はテキスト表現にシリアライズされ、パス名の順に並べられます。
構文
JSONAllValues(json)引数
json— JSONカラム。JSON
戻り値
JSONカラム内のすべての値を文字列として格納した配列を返します。Array(String)
例
使用例
CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory;
INSERT INTO test FORMAT JSONEachRow {"json": {"a": 42}}, {"json": {"b": "Hello"}}, {"json": {"a": [1, 2, 3], "c": "2020-01-01"}};
SELECT json, JSONAllValues(json) FROM test;┌─json───────────────────────────┬─JSONAllValues(json)──────┐
│ {"a":42} │ ['42'] │
│ {"b":"Hello"} │ ['Hello'] │
│ {"a":[1,2,3],"c":"2020-01-01"} │ ['[1,2,3]','2020-01-01'] │
└────────────────────────────────┴──────────────────────────┘JSONArrayLength
導入バージョン: v23.2.0
最上位のJSON配列に含まれる要素数を返します。
入力されたJSON文字列が無効な場合、この関数はNULLを返します。
構文
JSONArrayLength(json)別名: JSON_ARRAY_LENGTH
引数
json— 有効な JSON を表す String。String
戻り値
json が有効な JSON 配列を表す文字列である場合は配列要素数を返し、そうでない場合は NULL を返します。Nullable(UInt64)
例
使用例
SELECT
JSONArrayLength(''),
JSONArrayLength('[1,2,3]');┌─JSONArrayLength('')─┬─JSONArrayLength('[1,2,3]')─┐
│ ᴺᵁᴸᴸ │ 3 │
└─────────────────────┴────────────────────────────┘JSONDynamicPaths
導入バージョン: v24.8.0
JSONカラム内で個別のサブカラムとして格納されている動的パスの一覧を返します。
構文
JSONDynamicPaths(json)引数
json— JSONカラム。JSON
戻り値
JSONカラム内の動的パスの配列を返します。Array(String)
例
使用例
CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory;
INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}};
SELECT json, JSONDynamicPaths(json) FROM test;┌─json───────────────────────────┬─JSONDynamicPaths(json)─┐
│ {"a":42} │ ['a'] │
│ {"b":"Hello"} │ [] │
│ {"a":[1,2,3],"c":"2020-01-01"} │ ['a'] │
└────────────────────────────────┴────────────────────────┘JSONDynamicPathsWithTypes
導入バージョン: v24.8.0
JSONカラムの各行で、個別のサブカラムとして格納されている動的パスとその型の一覧を返します。
構文
JSONDynamicPathsWithTypes(json)引数
json— JSONカラム。JSON
戻り値
JSONカラム内の動的なパスとそのデータ型のマップを返します。 Map(String, String)
例
使用例
CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory;
INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}};
SELECT json, JSONDynamicPathsWithTypes(json) FROM test;┌─json───────────────────────────┬─JSONDynamicPathsWithTypes(json)─┐
│ {"a":42} │ {'a':'Int64'} │
│ {"b":"Hello"} │ {} │
│ {"a":[1,2,3],"c":"2020-01-01"} │ {'a':'Array(Nullable(Int64))'} │
└────────────────────────────────┴─────────────────────────────────┘JSONExtract
導入バージョン: v19.14.0
JSON を解析し、指定した ClickHouse のデータ型の値を抽出します。
構文
JSONExtract(json[, indices_or_keys, ...], return_type)引数
json— パースする JSON 文字列。Stringindices_or_keys— 0 個以上の引数からなるリストで、各要素には文字列または整数を指定できます。Stringまたは(U)Int*return_type— 返す ClickHouse のデータ型。String
戻り値
可能な場合は、指定された ClickHouse のデータ型の値を返します。そうでない場合は、その型のデフォルト値を返します。
例
使用例
SELECT JSONExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'Tuple(String, Array(Float64))') AS res;┌─res──────────────────────┐
│ ('hello',[-100,200,300]) │
└──────────────────────────┘JSONExtractArrayRaw
導入バージョン: v20.1.0
JSON 配列 の各要素を、未解析の文字列として表した配列を返します。
構文
JSONExtractArrayRaw(json[, indices_or_keys, ...])引数
json— パース対象の JSON 文字列。Stringindices_or_keys— 0 個以上の引数からなるリストで、各引数には文字列または整数のいずれかを指定できます。Stringまたは(U)Int*
戻り値
JSON 配列の要素を含む文字列の配列を返します。指定した部分が配列でない場合、または存在しない場合は、空の配列を返します。Array(String)
例
使用例
SELECT JSONExtractArrayRaw('{"a": "hello", "b": [-100, 200.0, "hello"]}', 'b') AS res;┌─res──────────────────────┐
│ ['-100','200','"hello"'] │
└──────────────────────────┘JSONExtractArrayRawCaseInsensitive
導入バージョン: v25.8.0
JSON 配列の各要素を未解析の文字列として表した配列を、キーの大文字・小文字を区別しない照合を用いて返します。この関数は JSONExtractArrayRaw に似ています。
構文
JSONExtractArrayRawCaseInsensitive(json [, indices_or_keys]...)引数
json— パース対象の JSON 文字列Stringindices_or_keys— 任意。配列までたどるためのインデックスまたはキー。キーの大文字・小文字を区別しない照合Stringまたは(U)Int*
戻り値
生の JSON 文字列の配列を返します。 Array(String)
例
基本
SELECT JSONExtractArrayRawCaseInsensitive('{"Items": [1, 2, 3]}', 'ITEMS')['1','2','3']JSONExtractBool
導入バージョン: v20.1.0
JSON を解析し、Bool 型の値を抽出します。
構文
JSONExtractBool(json[, indices_or_keys, ...])引数
json— パース対象の JSON 文字列。Stringindices_or_keys— 0 個以上の引数からなるリストで、各引数には文字列または整数を指定できます。Stringまたは(U)Int*
戻り値
値が存在する場合は Bool 値を返し、存在しない場合は 0 を返します。 Bool
例
使用例
SELECT JSONExtractBool('{"passed": true}', 'passed') AS res;┌─res─┐
│ 1 │
└─────┘JSONExtractBoolCaseInsensitive
導入バージョン: v25.8.0
JSON を解析し、キーの大文字・小文字を区別しない照合で真偽値を抽出します。この関数は JSONExtractBool と似ています。
構文
JSONExtractBoolCaseInsensitive(json [, indices_or_keys]...)引数
json— 解析対象の JSON 文字列Stringindices_or_keys— 任意。フィールドに到達するためのインデックスまたはキー。キーの大文字・小文字を区別しない照合Stringまたは(U)Int*
戻り値
抽出したブール値を返します (true の場合は 1、false の場合は 0) 。見つからない場合は 0 を返します。UInt8
例
基本
SELECT JSONExtractBoolCaseInsensitive('{"IsActive": true}', 'isactive')1JSONExtractCaseInsensitive
導入バージョン: v25.8.0
JSON を解析し、キーの大文字・小文字を区別しない照合で、指定された ClickHouse のデータ型の値を抽出します。この関数は JSONExtract に似ています。
構文
JSONExtractCaseInsensitive(json [, indices_or_keys...], return_type)引数
json— 解析する JSON 文字列Stringindices_or_keys— 任意。フィールドにアクセスするためのインデックスまたはキー。キーの大文字・小文字を区別しない照合Stringまたは(U)Int*return_type— 抽出する ClickHouse のデータ型String
戻り値
指定したデータ型で抽出した値を返します。Any
例
int_type
SELECT JSONExtractCaseInsensitive('{"Number": 123}', 'number', 'Int32')123array_type
SELECT JSONExtractCaseInsensitive('{"List": [1, 2, 3]}', 'list', 'Array(Int32)')[1,2,3]JSONExtractFloat
導入バージョン: v20.1.0
JSON を解析して、Float 型の値を抽出します。
構文
JSONExtractFloat(json[, indices_or_keys, ...])引数
json— パース対象の JSON 文字列。Stringindices_or_keys— 0 個以上の引数からなるリストで、各引数には文字列または整数を指定できます。Stringまたは(U)Int*
戻り値
値が存在する場合は Float 値を返し、存在しない場合は 0 を返します。 Float64
例
使用例
SELECT JSONExtractFloat('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 2) AS res;┌─res─┐
│ 200 │
└─────┘JSONExtractFloatCaseInsensitive
導入バージョン: v25.8.0
JSON を解析し、キーの大文字・小文字を区別しない照合で Float 型の値を抽出します。この関数は JSONExtractFloat に似ています。
構文
JSONExtractFloatCaseInsensitive(json [, indices_or_keys]...)引数
json— パースする JSON 文字列Stringindices_or_keys— 任意。フィールドにたどり着くためのインデックスまたはキー。キーの大文字・小文字を区別しない照合Stringまたは(U)Int*
戻り値
抽出された Float 値を返します。見つからない場合、または変換できない場合は 0 を返します。 Float64
例
基本
SELECT JSONExtractFloatCaseInsensitive('{"Price": 12.34}', 'PRICE')12.34JSONExtractInt
導入バージョン: v20.1.0
JSON をパースして、Int 型の値を抽出します。
構文
JSONExtractInt(json[, indices_or_keys, ...])引数
json— 解析する JSON 文字列。Stringindices_or_keys— 0 個以上の引数からなるリストで、各引数には文字列または整数を指定できます。Stringまたは(U)Int*
戻り値
値が存在する場合は Int 値を返し、存在しない場合は 0 を返します。 Int64
例
使用例
SELECT JSONExtractInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 1) AS res;┌──res─┐
│ -100 │
└──────┘JSONExtractIntCaseInsensitive
導入バージョン: v25.8.0
JSONを解析し、キーの大文字・小文字を区別しない照合で Int 型の値を抽出します。この関数は JSONExtractInt と似ています。
構文
JSONExtractIntCaseInsensitive(json [, indices_or_keys]...)引数
json— 解析する JSON 文字列Stringindices_or_keys— オプション。フィールドまでたどるためのインデックスまたはキー。キーの大文字・小文字を区別しない照合Stringまたは(U)Int*
戻り値
抽出された Int 値を返します。見つからない場合、または変換できない場合は 0 を返します。 Int64
例
基本
SELECT JSONExtractIntCaseInsensitive('{"Value": 123}', 'value')123入れ子
SELECT JSONExtractIntCaseInsensitive('{"DATA": {"COUNT": 42}}', 'data', 'Count')42JSONExtractKeys
導入バージョン: v21.11.0
JSON文字列を解析し、キーを抽出します。
構文
JSONExtractKeys(json[, indices_or_keys, ...])引数
json— 解析する JSON 文字列。Stringindices_or_keys— 0 個以上の引数のリストで、各引数は文字列または整数のいずれかです。Stringまたは(U)Int*
戻り値
JSONオブジェクトのキーを含む配列を返します。 Array(String)
例
使用例
SELECT JSONExtractKeys('{"a": "hello", "b": [-100, 200.0, 300]}') AS res;┌─res───────┐
│ ['a','b'] │
└───────────┘JSONExtractKeysAndValues
導入バージョン: v20.1.0
値が指定した ClickHouse のデータ型である JSON から、キー・バリューのペアを解析します。
構文
JSONExtractKeysAndValues(json[, indices_or_keys, ...], value_type)引数
json— パースする JSON 文字列。Stringindices_or_keys— 0 個以上の引数を指定でき、各引数には文字列または整数を指定できます。Stringまたは(U)Int*value_type— 値の ClickHouse データ型。String
戻り値
パースされたキー・バリューのペアからなるタプルの配列を返します。Array(Tuple(String, value_type))
例
使用例
SELECT JSONExtractKeysAndValues('{"x": {"a": 5, "b": 7, "c": 11}}', 'x', 'Int8') AS res┌─res────────────────────────┐
│ [('a',5),('b',7),('c',11)] │
└────────────────────────────┘JSONExtractKeysAndValuesCaseInsensitive
導入バージョン: v25.8.0
JSON から、キーの大文字・小文字を区別しない照合を用いてキー・バリューのペアを解析します。この関数は JSONExtractKeysAndValues に似ています。
構文
JSONExtractKeysAndValuesCaseInsensitive(json [, indices_or_keys...], value_type)引数
json— 解析する JSON 文字列Stringindices_or_keys— 任意。オブジェクト内をたどるためのインデックスまたはキー。キーの大文字・小文字を区別しない照合Stringまたは(U)Int*value_type— 値の ClickHouse データ型String
戻り値
キー・バリューのペアからなるタプルの配列を返します。 Array(Tuple(String, T))
例
基本
SELECT JSONExtractKeysAndValuesCaseInsensitive('{"Name": "Alice", "AGE": 30}', 'String')[('Name','Alice'),('AGE','30')]JSONExtractKeysAndValuesRaw
導入バージョン: v20.4.0
JSON オブジェクト のキーと値を含む タプル の Array を返します。すべての値は、未解析の文字列として表されます。
構文
JSONExtractKeysAndValuesRaw(json[, indices_or_keys, ...])引数
json— パース対象の JSON 文字列。Stringindices_or_keys— 0 個以上の引数からなるリストで、各引数には文字列または整数のいずれかを指定できます。Stringまたは(U)Int*
戻り値
値が未解析の文字列である、パース済みのキー・バリューのペアからなるタプルの配列を返します。Array(Tuple(String, String))
例
使用例
SELECT JSONExtractKeysAndValuesRaw('{"a": [-100, 200.0], "b": "hello"}') AS res;┌─res──────────────────────────────────┐
│ [('a','[-100,200]'),('b','"hello"')] │
└──────────────────────────────────────┘JSONExtractKeysAndValuesRawCaseInsensitive
導入バージョン: v25.8.0
キーの大文字・小文字を区別しない照合を使用して、JSONから生のキー・バリューのペアを抽出します。この関数は JSONExtractKeysAndValuesRaw に似ています。
構文
JSONExtractKeysAndValuesRawCaseInsensitive(json [, indices_or_keys]...)引数
json— parse する JSON 文字列Stringindices_or_keys— 任意。オブジェクトにたどるためのインデックスまたはキー。キーの大文字・小文字を区別しない照合Stringまたは(U)Int*
戻り値
キー・バリューのペアを生の文字列として含む Tuple の配列を返します。 Array(Tuple(String, String))
例
基本
SELECT JSONExtractKeysAndValuesRawCaseInsensitive('{"Name": "Alice", "AGE": 30}')[('Name','"Alice"'),('AGE','30')]JSONExtractKeysCaseInsensitive
導入バージョン: v25.8.0
JSON文字列を解析し、ネストされたオブジェクト内をたどる際にキーの大文字・小文字を区別しない照合を使用して、キーを抽出します。この関数は JSONExtractKeys に似ています。
構文
JSONExtractKeysCaseInsensitive(json [, indices_or_keys]...)引数
json— 解析する JSON 文字列Stringindices_or_keys— 省略可。オブジェクト内をたどるためのインデックスまたはキー。キーの大文字・小文字を区別しない照合Stringまたは(U)Int*
戻り値
JSONオブジェクトのキーの配列を返します。 Array(String)
例
基本
SELECT JSONExtractKeysCaseInsensitive('{"Name": "Alice", "AGE": 30}')['Name','AGE']ネスト
SELECT JSONExtractKeysCaseInsensitive('{"User": {"name": "John", "AGE": 25}}', 'user')['name','AGE']JSONExtractRaw
導入バージョン: v20.1.0
JSON の一部を、パースされていない文字列として返します。
構文
JSONExtractRaw(json[, indices_or_keys, ...])引数
json— パース対象の JSON 文字列。Stringindices_or_keys— 0 個以上の引数からなるリストで、各引数には文字列または整数を指定できます。Stringまたは(U)Int*
戻り値
JSON の一部を、パースされていない文字列として返します。その部分が存在しない場合、または型が正しくない場合は、空文字列が返されます。String
例
使用例
SELECT JSONExtractRaw('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') AS res;┌─res────────────┐
│ [-100,200,300] │
└────────────────┘JSONExtractRawCaseInsensitive
導入バージョン: v25.8.0
キーの大文字・小文字を区別しない照合を使用して、JSON の一部を解析せずに文字列として返します。この関数は JSONExtractRaw と似ています。
構文
JSONExtractRawCaseInsensitive(json [, indices_or_keys]...)引数
json— 解析対象の JSON 文字列Stringindices_or_keys— 省略可。フィールドにたどり着くためのインデックスまたはキー。キーの照合では大文字と小文字は区別されませんStringまたは(U)Int*
戻り値
抽出された要素の生の JSON 文字列を返します。 String
例
オブジェクト
SELECT JSONExtractRawCaseInsensitive('{"Object": {"key": "value"}}', 'OBJECT'){"key":"value"}JSONExtractString
導入バージョン: v20.1.0
JSON を解析し、String 型の値を抽出します。
構文
JSONExtractString(json[, indices_or_keys, ...])引数
json— 解析する JSON 文字列。Stringindices_or_keys— 0 個以上の引数からなるリストで、各引数には文字列または整数を指定できます。Stringまたは(U)Int*
戻り値
値が存在する場合は String 値を返し、存在しない場合は空文字列を返します。 String
例
使用例
SELECT JSONExtractString('{"a": "hello", "b": [-100, 200.0, 300]}', 'a') AS res;┌─res───┐
│ hello │
└───────┘JSONExtractStringCaseInsensitive
導入バージョン: v25.8.0
JSON を解析し、キーの大文字・小文字を区別しない照合で文字列を抽出します。この関数は JSONExtractString に似ています。
構文
JSONExtractStringCaseInsensitive(json [, indices_or_keys]...)引数
json— パースする JSON 文字列Stringindices_or_keys— 任意。フィールドに到達するためのインデックスまたはキー。キーは大文字と小文字を区別せずに照合されますStringまたは(U)Int*
戻り値
抽出された文字列値を返します。見つからない場合は空文字列を返します。 String
例
基本
SELECT JSONExtractStringCaseInsensitive('{"ABC": "def"}', 'abc')defネスト
SELECT JSONExtractStringCaseInsensitive('{"User": {"Name": "John"}}', 'user', 'name')JohnJSONExtractUInt
導入バージョン: v20.1.0
JSON をパースして、UInt 型の値を抽出します。
構文
JSONExtractUInt(json [, indices_or_keys, ...])引数
json— 解析する JSON 文字列。Stringindices_or_keys— 0 個以上の引数のリストで、各引数は文字列または整数のいずれかです。Stringまたは(U)Int*
戻り値
存在する場合は UInt 値を返し、存在しない場合は 0 を返します。 UInt64
例
使用例
SELECT JSONExtractUInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', -1) AS res;┌─res─┐
│ 300 │
└─────┘JSONExtractUIntCaseInsensitive
導入バージョン: v25.8.0
JSON を解析し、キーの大文字・小文字を区別しない照合で UInt 型の値を抽出します。この関数は JSONExtractUInt に似ています。
構文
JSONExtractUIntCaseInsensitive(json [, indices_or_keys]...)引数
json— 解析対象の JSON 文字列Stringindices_or_keys— 任意。フィールドまでたどるためのインデックスまたはキー。キーの照合では大文字と小文字を区別しませんStringまたは(U)Int*
戻り値
抽出された UInt 値を返します。見つからない場合、または変換できない場合は 0 を返します。 UInt64
例
基本
SELECT JSONExtractUIntCaseInsensitive('{"COUNT": 789}', 'count')789JSONHas
導入バージョン: v20.1.0
JSON ドキュメント内に、指定した値が存在するかどうかを返します。
構文
JSONHas(json[ ,indices_or_keys, ...])引数
戻り値
値が json 内に存在する場合は 1、存在しない場合は 0 を返します UInt8
例
使用例
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 1;
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 4) = 0;1
1JSONKey
導入バージョン: v20.1.0
JSON オブジェクトのフィールドのキーを、その索引 (1 始まり) で返します。JSON が文字列として渡された場合は、まずパースされます。2 番目の引数は、ネストされたオブジェクト内をたどるための JSON パスです。この関数は、指定した位置にあるキー名を返します。
構文
JSONKey(json[, indices_or_keys, ...])引数
json— 解析対象の JSON 文字列。Stringindices_or_keys— ネストされた要素へのパスを指定する、省略可能な索引またはキーのリスト。各引数には、文字列 (キーによるアクセス) または整数 (1 から始まる索引によるアクセス) のいずれかを指定できます。StringまたはInt*
戻り値
JSONオブジェクト内の指定した位置にあるキー名を返します。String
例
使用例
SELECT JSONKey('{"a": "hello", "b": [-100, 200.0, 300]}', 1);aJSONLength
導入バージョン: v20.1.0
JSON配列またはJSONオブジェクトの長さを返します。
値が存在しない場合、または型が一致しない場合は、0 が返されます。
構文
JSONLength(json [, indices_or_keys, ...])引数
json— 解析する JSON 文字列String[, indices_or_keys, ...]— 任意。0 個以上の引数のリスト。Stringまたは(U)Int8/16/32/64
戻り値
JSON 配列または JSON オブジェクトの長さを返します。値が存在しないか、型が異なる場合は 0 を返します。UInt64
例
使用例
SELECT JSONLength('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 3;
SELECT JSONLength('{"a": "hello", "b": [-100, 200.0, 300]}') = 2;1
1JSONMergePatch
導入バージョン: v23.10.0
複数の JSON オブジェクトをマージして生成された JSON オブジェクト文字列を返します。
構文
JSONMergePatch(json1[, json2, ...])別名: jsonMergePatch
引数
json1[, json2, ...]— 有効な JSON を含む文字列を1つ以上指定します。String
戻り値
JSON オブジェクト文字列が有効な場合、マージされた JSON オブジェクト文字列を返します。String
例
使用例
SELECT JSONMergePatch('{"a":1}', '{"name": "joey"}', '{"name": "tom"}', '{"name": "zoey"}') AS res;┌─res───────────────────┐
│ {"a":1,"name":"zoey"} │
└───────────────────────┘導入バージョン: v24.8.0
JSONカラムの共有データ構造に格納されているパスの一覧を返します。
構文
JSONSharedDataPaths(json)引数
json— JSONカラム。JSON
戻り値
JSONカラムの共有データ構造に格納されているパスの配列を返します。Array(String)
例
使用例
CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory;
INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}};
SELECT json, JSONSharedDataPaths(json) FROM test;┌─json───────────────────────────┬─JSONSharedDataPaths(json)─┐
│ {"a":42} │ [] │
│ {"b":"Hello"} │ ['b'] │
│ {"a":[1,2,3],"c":"2020-01-01"} │ ['c'] │
└────────────────────────────────┴───────────────────────────┘導入バージョン: v24.8.0
JSONカラムの各行について、共有データ構造に格納されているパスとその型の一覧を返します。
構文
JSONSharedDataPathsWithTypes(json)引数
json— JSONカラム。JSON
戻り値
共有データ構造に格納されたパスと、JSONカラム内におけるそれらのデータ型の対応を表すマップを返します。Map(String, String)
例
使用例
CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory;
INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}};
SELECT json, JSONSharedDataPathsWithTypes(json) FROM test;┌─json───────────────────────────┬─JSONSharedDataPathsWithTypes(json)─┐
│ {"a":42} │ {} │
│ {"b":"Hello"} │ {'b':'String'} │
│ {"a":[1,2,3],"c":"2020-01-01"} │ {'c':'Date'} │
└────────────────────────────────┴────────────────────────────────────┘JSONType
導入バージョン: v20.1.0
JSON値の型を返します。値が存在しない場合は、Null=0 を返します。
構文
JSONType(json[, indices_or_keys, ...])引数
json— 解析対象の JSON 文字列Stringjson[, indices_or_keys, ...]— 0 個以上の引数のリストで、各引数には文字列または整数を指定できます。Stringまたは(U)Int8/16/32/64
戻り値
JSON 値の型を文字列として返します。値が存在しない場合は Null=0 を返します。Enum
例
使用例
SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}') = 'Object';
SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}', 'a') = 'String';
SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 'Array';1
1
1JSON_EXISTS
導入バージョン: v21.8.0
JSON ドキュメント内に値が存在する場合は、1 が返されます。
値が存在しない場合は、0 が返されます。
構文
JSON_EXISTS(json, path)引数
戻り値
JSON ドキュメント内に値が存在する場合は 1 を、存在しない場合は 0 を返します。UInt8
例
使用例
SELECT JSON_EXISTS('{"hello":1}', '$.hello');
SELECT JSON_EXISTS('{"hello":{"world":1}}', '$.hello.world');
SELECT JSON_EXISTS('{"hello":["world"]}', '$.hello[*]');
SELECT JSON_EXISTS('{"hello":["world"]}', '$.hello[0]');┌─JSON_EXISTS('{"hello":1}', '$.hello')─┐
│ 1 │
└───────────────────────────────────────┘
┌─JSON_EXISTS('{"hello":{"world":1}}', '$.hello.world')─┐
│ 1 │
└───────────────────────────────────────────────────────┘
┌─JSON_EXISTS('{"hello":["world"]}', '$.hello[*]')─┐
│ 1 │
└──────────────────────────────────────────────────┘
┌─JSON_EXISTS('{"hello":["world"]}', '$.hello[0]')─┐
│ 1 │
└──────────────────────────────────────────────────┘JSON_QUERY
導入バージョン: v21.8.0
JSON を解析して、値を JSON 配列 または JSON オブジェクト として抽出します。 値が存在しない場合は、空文字列が返されます。
構文
JSON_QUERY(json, path)引数
戻り値
抽出された JSON 配列または JSON オブジェクトを文字列として返します。値が存在しない場合は空文字列を返します。String
例
使用例
SELECT JSON_QUERY('{"hello":"world"}', '$.hello');
SELECT JSON_QUERY('{"array":[[0, 1, 2, 3, 4, 5], [0, -1, -2, -3, -4, -5]]}', '$.array[*][0 to 2, 4]');
SELECT JSON_QUERY('{"hello":2}', '$.hello');
SELECT toTypeName(JSON_QUERY('{"hello":2}', '$.hello'));["world"]
[0, 1, 4, 0, -1, -4]
[2]
StringJSON_VALUE
導入バージョン: v21.11.0
JSON を解析し、値を JSON スカラーとして抽出します。値が存在しない場合、デフォルトでは空文字列が返されます。
この関数は、次の設定で制御されます。
- SET
function_json_value_return_type_allow_nullable=trueを設定すると、NULLが返されます。値が複合型 (struct、array、map など) の場合、デフォルトでは空文字列が返されます。 - SET
function_json_value_return_type_allow_complex=trueを設定すると、複合型の値が返されます。
構文
JSON_VALUE(json, path)引数
戻り値
抽出された JSON のスカラー値を文字列として返します。値が存在しない場合は空文字列を返します。String
例
使用例
SELECT JSON_VALUE('{"hello":"world"}', '$.hello');
SELECT JSON_VALUE('{"array":[[0, 1, 2, 3, 4, 5], [0, -1, -2, -3, -4, -5]]}', '$.array[*][0 to 2, 4]');
SELECT JSON_VALUE('{"hello":2}', '$.hello');
SELECT JSON_VALUE('{"hello":"world"}', '$.b') settings function_json_value_return_type_allow_nullable=true;world
0
2
\NdynamicElement
導入バージョン: v24.1.0
Dynamic カラムから、指定した型のカラムを抽出します。
この関数を使用すると、Dynamic カラムから特定の型の値を取り出せます。行に要求された型の値が含まれている場合は、その値を返します。行に別の型の値または NULL が含まれている場合は、スカラー型では NULL、Array 型では空の Array を返します。
構文
dynamicElement(dynamic, type_name)引数
dynamic— 抽出元の Dynamic カラム。Dynamictype_name— 抽出する Variant 型の名前 (例: 'String'、'Int64'、'Array(Int64)') 。
戻り値
Dynamic カラムから指定した型の値を返します。一致しない型の場合は NULL を返します (Array 型の場合は空の Array) 。Any
例
Dynamic カラムからさまざまな型を抽出する
CREATE TABLE test (d Dynamic) ENGINE = Memory;
INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]);
SELECT d, dynamicType(d), dynamicElement(d, 'String'), dynamicElement(d, 'Int64'), dynamicElement(d, 'Array(Int64)'), dynamicElement(d, 'Date'), dynamicElement(d, 'Array(String)') FROM test┌─d─────────────┬─dynamicType(d)─┬─dynamicElement(d, 'String')─┬─dynamicElement(d, 'Int64')─┬─dynamicElement(d, 'Array(Int64)')─┬─dynamicElement(d, 'Date')─┬─dynamicElement(d, 'Array(String)')─┐
│ ᴺᵁᴸᴸ │ None │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ [] │ ᴺᵁᴸᴸ │ [] │
│ 42 │ Int64 │ ᴺᵁᴸᴸ │ 42 │ [] │ ᴺᵁᴸᴸ │ [] │
│ Hello, World! │ String │ Hello, World! │ ᴺᵁᴸᴸ │ [] │ ᴺᵁᴸᴸ │ [] │
│ [1,2,3] │ Array(Int64) │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ [1,2,3] │ ᴺᵁᴸᴸ │ [] │
└───────────────┴────────────────┴─────────────────────────────┴────────────────────────────┴───────────────────────────────────┴───────────────────────────┴────────────────────────────────────┘dynamicType
導入バージョン: v24.1.0
Dynamic カラムの各行について、その Variant 型の型名を返します。
NULL を含む行では、この関数は 'None' を返します。それ以外のすべての行では、Dynamic カラムのその行に格納されている実際のデータ型 (例: 'Int64'、'String'、'Array(Int64)') を返します。
構文
dynamicType(dynamic)引数
dynamic— 調査対象の Dynamic カラム。Dynamic
戻り値
各行に格納された値の型名を返します。NULL 値の場合は 'None' を返します。String
例
Dynamic カラム内の型を調べる
CREATE TABLE test (d Dynamic) ENGINE = Memory;
INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]);
SELECT d, dynamicType(d) FROM test;┌─d─────────────┬─dynamicType(d)─┐
│ ᴺᵁᴸᴸ │ None │
│ 42 │ Int64 │
│ Hello, World! │ String │
│ [1,2,3] │ Array(Int64) │
└───────────────┴────────────────┘導入バージョン: v24.1.0
個別のサブカラムではなく、共有 variant フォーマットに格納されている Dynamic カラムの行に対して true を返します。
Dynamic カラムに max_types の制限がある場合、この制限を超える値は、個別の型付きサブカラムに分離されるのではなく、共有バイナリフォーマットで格納されます。この関数は、どの行がこの共有フォーマットで格納されているかを判別します。
構文
isDynamicElementInSharedData(dynamic)引数
dynamic— 調査対象の Dynamic カラム。Dynamic
戻り値
値が共有 Variant フォーマットで格納されている場合は true、個別のサブカラムとして格納されている場合、または NULL の場合は false を返します。Bool
例
max_types の制限がある Dynamic カラムで格納フォーマットを確認する
CREATE TABLE test (d Dynamic(max_types=2)) ENGINE = Memory;
INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]);
SELECT d, isDynamicElementInSharedData(d) FROM test;┌─d─────────────┬─isDynamicElementInSharedData(d)─┐
│ ᴺᵁᴸᴸ │ false │
│ 42 │ false │
│ Hello, World! │ false │
│ [1,2,3] │ true │
└───────────────┴─────────────────────────────────┘isValidJSON
導入バージョン: v20.1.0
渡された文字列が有効なJSONかどうかを判定します。
構文
isValidJSON(json)引数
json— 検証対象の JSON 文字列String
戻り値
文字列が有効な JSON の場合は 1、そうでない場合は 0 を返します。 UInt8
例
使用例
SELECT isValidJSON('{"a": "hello", "b": [-100, 200.0, 300]}') = 1;
SELECT isValidJSON('not JSON') = 0;1
1整数を使ってJSON配列とJSONオブジェクトの両方にアクセスする
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 0);
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 1);
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 2);
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', -1);
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', -2);
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 3);0
1
1
1
1
0prettyPrintJSON
導入バージョン: v26.4.0
JSON文字列を、改行とスペースによるインデントを付けた整形済みの形式で返します。
構文
prettyPrintJSON(json [, indent])引数
戻り値
整形済みの JSON 文字列。String
例
シンプルなオブジェクト
SELECT prettyPrintJSON('{"a":1,"b":"hello"}');{\n "a": 1,\n "b": "hello"\n}インデントのカスタマイズ
SELECT prettyPrintJSON('{"a":1}', 8);{\n "a": 1\n}simpleJSONExtractBool
導入バージョン: v21.4.0
field_name という名前のフィールドの値から true/false の値を解析します。
結果は UInt8 型です。
構文
simpleJSONExtractBool(json, field_name)別名: visitParamExtractBool
引数
json— フィールドを検索する対象の JSON。Stringfield_name— 検索するフィールド名。const String
戻り値
フィールドの値が true の場合は 1 を返し、それ以外の場合は 0 を返します。つまり、この関数は、少なくとも次のような場合に 0 を返します。
- フィールドが存在しない場合。
- フィールドの値が文字列の
trueである場合 (例:{"field":"true"}) 。 - フィールドの値が数値の
1である場合。UInt8
例
使用例
CREATE TABLE jsons
(
`json` String
)
ENGINE = MergeTree
ORDER BY tuple();
INSERT INTO jsons VALUES ('{"foo":false,"bar":true}');
INSERT INTO jsons VALUES ('{"foo":"true","qux":1}');
SELECT simpleJSONExtractBool(json, 'bar') FROM jsons ORDER BY json;
SELECT simpleJSONExtractBool(json, 'foo') FROM jsons ORDER BY json;0
1
0
0simpleJSONExtractFloat
導入バージョン: v21.4.0
field_name という名前のフィールドの値から Float64 を抽出します。
field_name が文字列フィールドの場合は、文字列の先頭から数値として解釈しようとします。
フィールドが存在しない場合、または存在していても数値が含まれていない場合は、0 を返します。
構文
simpleJSONExtractFloat(json, field_name)別名: visitParamExtractFloat
引数
json— フィールドを検索する対象の JSON。Stringfield_name— 検索するフィールドの名前。const String
戻り値
フィールドが存在し、数値が含まれている場合はそのフィールドから解析された数値を返します。存在しない場合、または数値が含まれていない場合は 0 を返します。 Float64
例
使用例
CREATE TABLE jsons
(
`json` String
)
ENGINE = MergeTree
ORDER BY tuple();
INSERT INTO jsons VALUES ('{"foo":"-4e3"}');
INSERT INTO jsons VALUES ('{"foo":-3.4}');
INSERT INTO jsons VALUES ('{"foo":5}');
INSERT INTO jsons VALUES ('{"foo":"not1number"}');
INSERT INTO jsons VALUES ('{"baz":2}');
SELECT simpleJSONExtractFloat(json, 'foo') FROM jsons ORDER BY json;0
-4000
0
-3.4
5simpleJSONExtractInt
導入バージョン: v21.4.0
field_name という名前のフィールドの値から Int64 をパースします。
field_name が文字列フィールドの場合は、文字列の先頭から数値をパースしようとします。
フィールドが存在しない場合、または存在していても数値が含まれていない場合は、0 を返します。
構文
simpleJSONExtractInt(json, field_name)別名: visitParamExtractInt
引数
json— フィールドを検索する対象の JSON。Stringfield_name— 検索するフィールドの名前。const String
戻り値
フィールドが存在し、その値が数値である場合はそのフィールドから解析した数値を返し、それ以外の場合は 0 を返します。Int64
例
使用例
CREATE TABLE jsons
(
`json` String
)
ENGINE = MergeTree
ORDER BY tuple();
INSERT INTO jsons VALUES ('{"foo":"-4e3"}');
INSERT INTO jsons VALUES ('{"foo":-3.4}');
INSERT INTO jsons VALUES ('{"foo":5}');
INSERT INTO jsons VALUES ('{"foo":"not1number"}');
INSERT INTO jsons VALUES ('{"baz":2}');
SELECT simpleJSONExtractInt(json, 'foo') FROM jsons ORDER BY json;0
-4
0
-3
5simpleJSONExtractRaw
導入バージョン: v21.4.0
field_name という名前のフィールドの値を、区切り文字も含めた String として返します。
構文
simpleJSONExtractRaw(json, field_name)別名: visitParamExtractRaw
引数
json— フィールドを検索する対象の JSON。Stringfield_name— 検索するフィールドの名前。const String
戻り値
フィールドが存在する場合は、そのフィールドの値を区切り文字を含めて文字列として返し、存在しない場合は空文字列を返します。String
例
使用例
CREATE TABLE jsons
(
`json` String
)
ENGINE = MergeTree
ORDER BY tuple();
INSERT INTO jsons VALUES ('{"foo":"-4e3"}');
INSERT INTO jsons VALUES ('{"foo":-3.4}');
INSERT INTO jsons VALUES ('{"foo":5}');
INSERT INTO jsons VALUES ('{"foo":{"def":[1,2,3]}}');
INSERT INTO jsons VALUES ('{"baz":2}');
SELECT simpleJSONExtractRaw(json, 'foo') FROM jsons ORDER BY json;"-4e3"
-3.4
5
{"def":[1,2,3]}simpleJSONExtractString
導入バージョン: v21.4.0
field_name という名前のフィールドの値から、二重引用符で囲まれた String を解析します。
実装の詳細
現在、基本多言語面 (BMP) に含まれない \uXXXX\uYYYY 形式のコードポイントはサポートされていません (UTF-8 ではなく CESU-8 に変換されます) 。
構文
simpleJSONExtractString(json, field_name)別名: visitParamExtractString
引数
json— フィールドを検索する対象の JSON。Stringfield_name— 検索するフィールド名。const String
戻り値
フィールドのエスケープされていない値を、区切り文字を含む文字列として返します。フィールドに二重引用符で囲まれた文字列が含まれていない場合、エスケープ解除に失敗した場合、またはフィールドが存在しない場合は、空文字列を返します。 String
例
使用例
CREATE TABLE jsons
(
`json` String
)
ENGINE = MergeTree
ORDER BY tuple();
INSERT INTO jsons VALUES ('{"foo":"\\n\\u0000"}');
INSERT INTO jsons VALUES ('{"foo":"\\u263"}');
INSERT INTO jsons VALUES ('{"foo":"\\u263a"}');
INSERT INTO jsons VALUES ('{"foo":"hello}');
SELECT simpleJSONExtractString(json, 'foo') FROM jsons ORDER BY json;\n\0
☺simpleJSONExtractUInt
導入バージョン: v21.4.0
field_name という名前のフィールドの値から UInt64 をパースします。
field_name が文字列フィールドの場合は、その文字列の先頭から数値をパースしようとします。
フィールドが存在しない場合、または存在していても数値が含まれていない場合は、0 を返します。
構文
simpleJSONExtractUInt(json, field_name)別名: visitParamExtractUInt
引数
json— フィールドを検索する対象の JSON。Stringfield_name— 検索対象のフィールド名。const String
戻り値
フィールドが存在し、その値が数値である場合はその数値を返し、それ以外の場合は 0 を返します UInt64
例
使用例
CREATE TABLE jsons
(
`json` String
)
ENGINE = MergeTree
ORDER BY tuple();
INSERT INTO jsons VALUES ('{"foo":"4e3"}');
INSERT INTO jsons VALUES ('{"foo":3.4}');
INSERT INTO jsons VALUES ('{"foo":5}');
INSERT INTO jsons VALUES ('{"foo":"not1number"}');
INSERT INTO jsons VALUES ('{"baz":2}');
SELECT simpleJSONExtractUInt(json, 'foo') FROM jsons ORDER BY json;0
4
0
3
5simpleJSONHas
導入バージョン: v21.4.0
field_name という名前のフィールドが存在するかどうかを返します。
構文
simpleJSONHas(json, field_name)別名: visitParamHas
引数
json— フィールドを検索する対象の JSON。Stringfield_name— 検索対象のフィールド名。const String
戻り値
フィールドが存在する場合は 1、存在しない場合は 0 を返します。 UInt8
例
使用例
CREATE TABLE jsons
(
`json` String
)
ENGINE = MergeTree
ORDER BY tuple();
INSERT INTO jsons VALUES ('{"foo":"true","qux":1}');
SELECT simpleJSONHas(json, 'foo') FROM jsons;
SELECT simpleJSONHas(json, 'bar') FROM jsons;1
0toJSONString
導入バージョン: v21.7.0
値を JSON 表現にシリアライズします。さまざまなデータ型とネストされた構造をサポートしています。
64 ビットの 整数 以上 (UInt64 や Int128 など) は、デフォルトで引用符で囲まれます。output_format_json_quote_64bit_integers でこの動作を制御します。
特殊な値 NaN と inf は null に置き換えられます。これらを表示するには、output_format_json_quote_denormals 設定を有効にします。
Enum 値をシリアライズする場合、この関数はその名前を出力します。
関連項目:
構文
toJSONString(value)引数
value— シリアライゼーションする値です。値には任意のデータ型を指定できます。Any
戻り値
値のJSON表現を返します。String
例
Mapのシリアライゼーション
SELECT toJSONString(map('key1', 1, 'key2', 2));┌─toJSONString(map('key1', 1, 'key2', 2))─┐
│ {"key1":1,"key2":2} │
└─────────────────────────────────────────┘特殊な値
SELECT toJSONString(tuple(1.25, NULL, NaN, +inf, -inf, [])) SETTINGS output_format_json_quote_denormals = 1;┌─toJSONString((1.25, NULL, nan, inf, -inf, []))─┐
│ [1.25,null,"nan","inf","-inf",[]] │
└────────────────────────────────────────────────┘