JSON 関数
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 に基づく大文字小文字を区別しないキー照合を行います。 大文字小文字を区別する対応関数と同様に動作しますが、オブジェクトのキーの照合時に大文字小文字を考慮しません。 大文字小文字の違いだけで複数のキーが一致した場合は、最初に一致したものが戻り値になります。
これらの関数は、大文字小文字を区別する対応関数よりもパフォーマンスが低下する可能性があるため、可能であれば通常の JSONExtract 関数を使用してください。
JSONAllPaths
導入バージョン: v24.8
JSON カラム内の各行に格納されているすべてのパスのリストを返します。
構文
引数
json— JSON カラム。JSON
戻り値
JSON カラム内のすべてのパスの配列を返します。Array(String)
例
使用例
JSONAllPathsWithTypes
導入バージョン: v24.8
JSON カラム内の各行に保存されている、すべてのパスとそのデータ型の一覧を返します。
構文
引数
json— JSON カラム。JSON
戻り値
JSON カラム内のすべてのパスとそのデータ型のマップを返します。Map(String, String)
例
使用例
JSONArrayLength
導入バージョン: v23.2
最も外側の JSON 配列内の要素数を返します。
入力 JSON 文字列が無効な場合、関数は NULL を返します。
構文
別名: JSON_ARRAY_LENGTH
引数
json— 有効な JSON を表す文字列。String
返される値
json が有効な JSON 配列を表す文字列であれば配列要素の数を返し、それ以外の場合は NULL を返します。Nullable(UInt64)
例
使用例
JSONDynamicPaths
導入バージョン: v24.8
JSON カラム内で個別のサブカラムとして保存されている動的パスの一覧を返します。
構文
引数
json— JSON カラム。JSON
戻り値
JSON カラム内に含まれる動的パスの配列を返します。Array(String)
例
使用例
JSONDynamicPathsWithTypes
導入されたバージョン: v24.8
JSON カラム内の各行について、個別のサブカラムとして保存されている動的パスとその型の一覧を返します。
構文
引数
json— JSONカラム。JSON
戻り値
JSONカラム内に存在する動的パスと、それぞれのデータ型のマップを返します。Map(String, String)
例
使用例
JSONExtract
導入バージョン: v19.14
JSON をパースし、指定された ClickHouse データ型の値を抽出します。
構文
引数
json— 解析する JSON 文字列。Stringindices_or_keys— 0 個以上の引数からなるリストで、それぞれは文字列または整数を指定できます。Stringまたは(U)Int*return_type— 返す ClickHouse のデータ型。String
戻り値
可能であれば指定された ClickHouse のデータ型の値を返し、それ以外の場合はその型のデフォルト値を返します。
例
使用例
JSONExtractArrayRaw
導入バージョン: v20.1
JSON 配列の各要素を、パース前の文字列のまま格納した配列を返します。
構文
引数
json— 解析する JSON 文字列。Stringindices_or_keys— 0 個以上の引数からなるリストで、それぞれは文字列または整数とすることができます。Stringまたは(U)Int*
戻り値
JSON 配列の要素を表す文字列の配列を返します。対象の部分が配列でない場合や存在しない場合は、空配列を返します。Array(String)
例
使用例
JSONExtractArrayRawCaseInsensitive
導入バージョン: v25.8
JSON 配列の各要素を、それぞれパースされていない文字列として表現した配列を、キーの大文字・小文字を区別しない一致で取得して返します。この関数は JSONExtractArrayRaw と類似しています。
構文
引数
json— 解析する JSON 文字列Stringindices_or_keys— 省略可。配列内を走査するためのインデックスまたはキー。キーは大文字小文字を区別せずに照合されるStringまたは(U)Int*
返される値
生の JSON 文字列からなる配列を返します。Array(String)
使用例
基本
JSONExtractBool
導入バージョン: v20.1
JSON をパースし、Bool 型の値を抽出します。
構文
引数
json— 解析する JSON 文字列。Stringindices_or_keys— 0 個以上の引数からなるリストで、各要素は文字列または整数のいずれかです。Stringまたは(U)Int*
返り値
存在する場合は Bool 型の値を返し、存在しない場合は 0 を返します。Bool
例
使用例
JSONExtractBoolCaseInsensitive
導入バージョン: v25.8
JSON をパースし、キーを大文字小文字を区別せずに照合してブール値を抽出します。この関数は JSONExtractBool と同様です。
構文
引数
json— 解析する JSON 文字列Stringindices_or_keys— オプション。フィールドへアクセスするためのインデックスまたはキー。キーは大文字小文字を区別せずに照合されるStringまたは(U)Int*
返り値
抽出されたブール値(true の場合は 1、false の場合は 0)、見つからない場合は 0 を返す。UInt8
使用例
基本
JSONExtractCaseInsensitive
導入バージョン: v25.8
JSON を解析し、キーに対して大文字・小文字を区別しない照合を行って、指定された ClickHouse データ型の値を抽出します。この関数は JSONExtract と類似しています。
構文
引数
json— 解析する JSON 文字列Stringindices_or_keys— 省略可能。フィールドにアクセスするためのインデックスまたはキー。キーは大文字小文字を区別せずに照合されるStringまたは(U)Int*return_type— 抽出する ClickHouse のデータ型String
戻り値
指定されたデータ型で抽出された値を返します。 Any
例
int_type
array_type
JSONExtractFloat
導入バージョン: v20.1
JSON を解析し、Float 型の値を抽出します。
構文
引数
戻り値
存在する場合は浮動小数点値を返し、存在しない場合は 0 を返します。Float64
例
使用例
JSONExtractFloatCaseInsensitive
導入されたバージョン: v25.8
JSON を解析し、大文字・小文字を区別しないキーの照合によって Float 型の値を抽出します。この関数は JSONExtractFloat と類似しています。
構文
引数
json— 解析する JSON 文字列Stringindices_or_keys— 省略可。フィールドを参照するためのインデックスまたはキー。キーは大文字小文字を区別せずに照合されますStringまたは(U)Int*
戻り値
抽出された浮動小数点数の値を返します。見つからない場合、または変換できない場合は 0 を返します。Float64
例
基本
JSONExtractInt
導入バージョン: v20.1
JSONを解析して、Int 型の値を抽出します。
構文
引数
json— パースする JSON 文字列。Stringindices_or_keys— 0 個以上の引数からなるリストで、それぞれは文字列または整数とすることができます。Stringまたは(U)Int*
戻り値
値が存在する場合は整数値を返し、存在しない場合は 0 を返します。Int64
例
使用例
JSONExtractIntCaseInsensitive
導入バージョン: v25.8
JSON をパースし、キーの大文字と小文字を区別せずに Int 型の値を抽出します。この関数は JSONExtractInt と同様です。
構文
引数
json— パースする JSON 文字列Stringindices_or_keys— 省略可。フィールドに移動するためのインデックスまたはキー。キーは大文字・小文字を区別せずに照合されるStringまたは(U)Int*
返される値
抽出された Int 値を返します。見つからない場合や変換できない場合は 0 を返します。Int64
使用例
基本
ネスト
JSONExtractKeys
導入バージョン:v21.11
JSON 文字列を解析し、キーを抽出します。
構文
引数
返り値
JSON オブジェクトのキーを要素とする配列を返します。Array(String)
例
使用例
JSONExtractKeysAndValues
導入バージョン: v20.1
指定した ClickHouse データ型の値を持つ JSON から、キーと値のペアを抽出します。
構文
引数
json— 解析する JSON 文字列。Stringindices_or_keys— 0 個以上の引数からなるリストで、それぞれの要素は文字列または整数です。Stringまたは(U)Int*value_type— 値の ClickHouse データ型。String
戻り値
解析されたキーと値のペアからなるタプルの配列を返します。Array(Tuple(String, value_type))
例
使用例
JSONExtractKeysAndValuesCaseInsensitive
導入バージョン: v25.8
キー名の大文字小文字を区別しないマッチングを用いて、JSON からキーと値のペアを抽出します。この関数は JSONExtractKeysAndValues に類似しています。
構文
引数
json— 解析する JSON 文字列Stringindices_or_keys— 省略可。オブジェクト内をたどるためのインデックスまたはキー。キーは大文字小文字を区別せずに照合されるStringまたは(U)Int*value_type— 値の ClickHouse データ型String
戻り値
キーと値のペアを含むタプルの配列を返します。Array(Tuple(String, T))
使用例
基本
JSONExtractKeysAndValuesRaw
導入: v20.4
JSON オブジェクトからキーと値を含むタプルの配列を返します。すべての値は未パースの文字列として表現されます。
構文
引数
返り値
キーと値のペアを表すタプルの配列を返します。値は未解析の文字列のままです。Array(Tuple(String, String))
例
使用例
JSONExtractKeysAndValuesRawCaseInsensitive
導入: v25.8
キーの大文字・小文字を区別しない照合で、JSON から生のキーと値のペアを抽出します。この関数は JSONExtractKeysAndValuesRaw と同様です。
構文
引数
json— 解析対象の JSON 文字列Stringindices_or_keys— 省略可。オブジェクト内を辿るためのインデックスまたはキー。キーは大文字小文字を区別せずに照合されるStringまたは(U)Int*
返される値
キーと値のペアを生の文字列として含むタプルの配列を返します。Array(Tuple(String, String))
例
基本例
JSONExtractKeysCaseInsensitive
導入バージョン: v25.8
JSON 文字列をパースし、大文字と小文字を区別しないキー照合を用いてネストされたオブジェクトをたどり、キーを抽出します。この関数は JSONExtractKeys と類似しています。
構文
引数
json— 解析する JSON 文字列Stringindices_or_keys— 省略可。オブジェクト内をたどるためのインデックスまたはキー。キーは大文字小文字を区別せずに照合されるStringまたは(U)Int*
戻り値
JSON オブジェクトからキーの配列を返します。Array(String)
使用例
基本例
ネストされた
JSONExtractRaw
導入バージョン: v20.1
JSON の一部を未解析の文字列として返します。
構文
引数
返される値
JSON の一部をパースされていない文字列として返します。その部分が存在しないか、型が期待と異なる場合は空文字列が返されます。String
例
使用例
JSONExtractRawCaseInsensitive
導入バージョン: v25.8
キーの大文字・小文字を区別しない(一致をケースインセンシティブにする)方式で、JSON の一部を未解析の文字列として返します。この関数は JSONExtractRaw と似ています。
構文
引数
json— 解析する JSON 文字列Stringindices_or_keys— 省略可能。フィールドを指すインデックスまたはキー。キーは大文字小文字を区別せずに照合されるStringまたは(U)Int*
戻り値
抽出された要素の生の JSON 文字列を返します。String
例
object
JSONExtractString
導入バージョン: v20.1
JSON を解析し、String 型の値を抽出します。
構文
引数
json— 解析する JSON 文字列。Stringindices_or_keys— 0 個以上の引数からなるリストで、それぞれは文字列または整数値のいずれか。Stringまたは(U)Int*
戻り値
値が存在する場合は String 型の値を返し、存在しない場合は空文字列を返します。String
例
使用例
JSONExtractStringCaseInsensitive
導入バージョン: v25.8
JSON を解析し、キーの大文字・小文字を区別しない一致で文字列を抽出します。この関数は JSONExtractString と類似しています。
構文
引数
json— 解析する JSON 文字列Stringindices_or_keys— 任意。対象フィールドへアクセスするためのインデックスまたはキー。キーは大文字小文字を区別しないマッチングを行うStringまたは(U)Int*
戻り値
抽出された文字列値を返します。見つからない場合は空文字列を返します。 String
例
基本
ネスト
JSONExtractUInt
v20.1 で導入。
JSON を解析して、UInt 型の値を抽出します。
構文
引数
json— 解析する JSON 文字列。Stringindices_or_keys— 0 個以上の引数からなるリストで、各引数は文字列または整数を指定できます。Stringまたは(U)Int*
返される値
値が存在する場合は UInt 値を返し、存在しない場合は 0 を返します。UInt64
例
使用例
JSONExtractUIntCaseInsensitive
導入バージョン: v25.8
JSON を解析し、キーの大文字・小文字を区別しない照合で UInt 型の値を抽出します。この関数は JSONExtractUInt と類似しています。
構文
引数
json— 解析する JSON 文字列Stringindices_or_keys— オプションの引数。フィールドへ移動するためのインデックスまたはキー。キーは大文字小文字を区別せずにマッチングされるStringまたは(U)Int*
返される値
抽出された UInt 値を返します。見つからない場合や変換できない場合は 0 を返します。UInt64
例
基本的な例
JSONHas
導入バージョン: v20.1
指定した値(複数可)が JSON ドキュメント内に存在するかどうかを確認します。
構文
引数
戻り値
値が json 内に存在する場合は 1、存在しない場合は 0 を返す UInt8
例
使用例
JSONLength
導入バージョン: v20.1
JSON 配列または JSON オブジェクトの長さを返します。
値が存在しないか、型が正しくない場合は 0 を返します。
構文
引数
json— パースする JSON 文字列String[, indices_or_keys, ...]— 省略可能。0 個以上の引数のリスト。Stringまたは(U)Int8/16/32/64
戻り値
JSON 配列または JSON オブジェクトの長さを返します。値が存在しないか、型が誤っている場合は 0 を返します。UInt64
例
使用例
JSONMergePatch
導入バージョン: v23.10
複数の JSON オブジェクトをマージして生成される、マージされた JSON オブジェクト文字列を返します。
構文
別名: jsonMergePatch
引数
json1[, json2, ...]— 1 つ以上の有効な JSON 文字列。String
戻り値
有効な JSON オブジェクト文字列が指定された場合、それらをマージした JSON オブジェクト文字列を返します。String
例
使用例
JSONSharedDataPaths
導入バージョン: v24.8
JSON カラムの共有データ構造に格納されているパスの一覧を返します。
構文
引数
json— JSONカラム。JSON
戻り値
JSONカラム内の共有データ構造に保存されているパスの配列を返します。Array(String)
例
使用例
JSONSharedDataPathsWithTypes
導入バージョン: v24.8
共有データ構造に格納されているパスの一覧と、JSONカラムの各行におけるそれらの型を返します。
構文
引数
json— JSONカラム。JSON
戻り値
共有データ構造内に保存されているパスと、そのJSONカラム内でのデータ型のマップを返します。Map(String, String)
例
使用例
JSONType
導入バージョン: v20.1
JSON 値の型を返します。値が存在しない場合は、Null = 0 を返します。
構文
引数
json— パースする JSON 文字列Stringjson[, indices_or_keys, ...]— 0 個以上の引数のリストで、それぞれは文字列または整数です。Stringまたは(U)Int8/16/32/64
戻り値
JSON 値の型を文字列として返します。値が存在しない場合は、Enum 型の Null=0 を返します。
例
使用例
JSON_EXISTS
導入バージョン: v21.8
JSON ドキュメント内に値が存在する場合は 1 を返します。
値が存在しない場合は 0 を返します。
構文
引数
戻り値
JSON ドキュメント内の指定したパスに値が存在する場合は 1 を、それ以外の場合は 0 を返します。UInt8
例
使用例
JSON_QUERY
導入バージョン: v21.8
JSON を解析して、値を JSON 配列または JSON オブジェクトとして抽出します。 値が存在しない場合は、空文字列が返されます。
構文
引数
戻り値
抽出された JSON 配列または JSON オブジェクトを文字列として返します。値が存在しない場合は空文字列を返します。String
例
使用例
JSON_VALUE
導入バージョン: v21.11
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 スカラ値を文字列として返します。値が存在しない場合は空文字列を返します。String
例
使用例
dynamicElement
導入バージョン: v24.1
Dynamic カラムから、指定した型のカラムを抽出します。
この関数は、Dynamic カラムから特定の型の値を抽出します。行に要求された型の値が
含まれている場合は、その値を返します。行に別の型または NULL が含まれている場合は、スカラー型に対しては NULL を、
配列型に対しては空の配列を返します。
構文
引数
dynamic— 抽出元の Dynamic カラム。Dynamictype_name— 抽出するバリアント型の名前 (例: 'String', 'Int64', 'Array(Int64)')。
戻り値
指定された型に対応する値を Dynamic カラムから返します。一致しない型の場合は NULL を返し、配列型の場合は空配列を返します。Any
例
Dynamic カラムから異なる型を抽出する
dynamicType
導入バージョン: v24.1
Dynamic カラムの各行に対して、そのバリアントの型名を返します。
NULL を含む行では、関数は 'None' を返します。それ以外の行では、Dynamic カラムのその行に格納されている実際のデータ型(例: 'Int64'、'String'、'Array(Int64)')を返します。
構文
引数
dynamic— 検査する動的カラム。Dynamic
戻り値
各行に格納されている値の型名を返します。NULL 値の場合は 'None' を返します。String
例
Dynamic カラム内の型を確認
isDynamicElementInSharedData
導入バージョン: v24.1
Dynamic カラムのうち、個別のサブカラムとしてではなく共有のバリアント形式で保存されている行に対して true を返します。
Dynamic カラムに max_types 制限が設定されている場合、この制限を超えた値は、個別の型付きサブカラムに分割される代わりに、共有のバイナリ形式で保存されます。この関数は、どの行がこの共有形式で保存されているかを判別します。
構文
引数
dynamic— 確認する Dynamic カラム。Dynamic
戻り値
値が shared variant 形式で保存されている場合は true を返し、個別のサブカラムとして保存されている場合、または NULL の場合は false を返します。Bool
例
max_types 制限付きの Dynamic カラムにおけるストレージ形式の確認
isValidJSON
導入バージョン: v20.1
渡された文字列が有効な JSON 形式かどうかを検証します。
構文
引数
json— 検証対象の JSON 文字列String
戻り値
文字列が有効な JSON であれば 1、そうでなければ 0 を返します。UInt8
例
使用例
整数を使って JSON 配列および JSON オブジェクトの両方にアクセスする
simpleJSONExtractBool
導入バージョン: v21.4
field_name という名前のフィールドの値から true/false の真偽値をパースします。
結果の型は UInt8 です。
構文
エイリアス: visitParamExtractBool
引数
json— フィールドを検索する対象の JSON。Stringfield_name— 検索対象のフィールド名。const String
戻り値
フィールドの値が true の場合は 1 を返し、それ以外の場合は 0 を返します。これは、この関数が次のような場合を含めて(これらに限定されず)0 を返すことを意味します:
- フィールドが存在しない場合。
- フィールドの値が文字列の
trueである場合。例:{"field":"true"}。 - フィールドの値が数値の
1である場合。UInt8
例
使用例
simpleJSONExtractFloat
導入バージョン: v21.4
field_name という名前のフィールドの値から Float64 をパースします。
field_name が文字列フィールドの場合、文字列の先頭から数値として解釈できるか試みます。
フィールドが存在しない場合、または存在しても数値を含まない場合は 0 を返します。
構文
エイリアス: visitParamExtractFloat
引数
json— フィールドを検索する対象の JSON。Stringfield_name— 検索するフィールド名。const String
返される値
フィールドが存在し、その値が数値であれば、その数値を解析して返し、そうでなければ 0 を返します。Float64
例
使用例
simpleJSONExtractInt
導入バージョン: v21.4
field_name という名前のフィールドの値から Int64 をパースします。
field_name が文字列フィールドの場合は、文字列の先頭から数値のパースを試みます。
フィールドが存在しない場合、または存在していても数値を含まない場合は 0 を返します。
構文
別名: visitParamExtractInt
引数
json— フィールドを検索する対象の JSON。Stringfield_name— 検索対象のフィールド名。const String
戻り値
フィールドが存在し、その値が数値であればそのフィールドからパースされた数値を返し、そうでない場合は 0 を返す。Int64
例
使用例
simpleJSONExtractRaw
導入されたバージョン: v21.4
区切りも含めて、field_name という名前のフィールドの値を String として返します。
構文
別名: visitParamExtractRaw
引数
json— フィールドを検索する対象の JSON。Stringfield_name— 検索対象のフィールド名。const String
戻り値
フィールドが存在する場合は区切り文字を含めたその値を文字列として返し、存在しない場合は空文字列を返します。String
例
使用例
simpleJSONExtractString
導入されたバージョン: v21.4
field_name という名前のフィールドの値から、二重引用符で囲まれている String を解析します。
実装詳細
現在、基本多言語面に含まれないコードポイントを \uXXXX\uYYYY 形式で表現したものには対応していません(UTF-8 ではなく CESU-8 に変換されます)。
構文
別名: visitParamExtractString
引数
json— フィールドを検索する対象の JSON。Stringfield_name— 検索するフィールド名。const String
返される値
フィールドのエスケープ解除された値を、区切り文字も含めて文字列として返します。フィールドにダブルクォーテーションで囲まれた文字列が含まれていない場合、エスケープ解除に失敗した場合、またはフィールドが存在しない場合は、空文字列を返します。String
例
使用例
simpleJSONExtractUInt
導入バージョン: v21.4
field_name という名前のフィールドの値から UInt64 を抽出します。
field_name が文字列フィールドの場合、文字列の先頭から数値としての解釈を試みます。
フィールドが存在しない場合、または存在しても数値を含まない場合は 0 を返します。
構文
エイリアス: visitParamExtractUInt
引数
json— フィールドを検索する対象の JSON。Stringfield_name— 検索対象のフィールド名。const String
返される値
フィールドが存在し、その内容が数値である場合は、そのフィールドからパースされた数値を返し、そうでない場合は 0 を返します。UInt64
例
使用例
simpleJSONHas
導入バージョン: v21.4
field_name という名前のフィールドが存在するかどうかを判定します。
構文
別名: visitParamHas
引数
json— フィールドを検索する JSON。Stringfield_name— 検索するフィールド名。const String
返される値
フィールドが存在する場合は 1、存在しない場合は 0 を返します。UInt8
例
使用例
toJSONString
導入バージョン: v21.7
値をその JSON 表現にシリアライズします。さまざまなデータ型およびネストした構造をサポートします。
64-bit の整数以上(UInt64 や Int128 など)は、デフォルトでは引用符で囲まれます。output_format_json_quote_64bit_integers によってこの動作を制御できます。
特別な値 NaN および inf は null に置き換えられます。output_format_json_quote_denormals 設定を有効にすると、それらを表示できます。
Enum の値をシリアライズする場合、この関数はその名前を出力します。
関連項目:
構文
引数
value— シリアル化する値。任意のデータ型の値を指定できます。Any
戻り値
値の JSON 表現を返します。String
例
Map のシリアル化
特殊値