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文字列。Stringreturn_type— 返されるClickHouseデータ型。Stringindices_or_keys— 文字列または整数を指定できる0個以上の引数のリスト。Stringまたは(U)Int*
戻り値
可能であれば指定されたClickHouseデータ型の値を返し、それ以外の場合はその型のデフォルト値を返します。
例
使用例
JSONExtractArrayRaw
導入バージョン: v20.1
JSON配列の要素を含む配列を返します。各要素は未解析の文字列として表現されます。
構文
引数
戻り値
JSON配列要素を含む文字列の配列を返します。該当部分が配列でない場合、または存在しない場合は、空の配列が返されます。Array(String)
例
使用例
JSONExtractArrayRawCaseInsensitive
導入バージョン: v25.8
大文字小文字を区別しないキーマッチングを使用して、JSON配列の各要素を未解析の文字列として表現した配列を返します。この関数はJSONExtractArrayRawと類似しています。
構文
引数
json— 解析するJSON文字列Stringindices_or_keys— オプション。配列へナビゲートするためのインデックスまたはキー。キーは大文字小文字を区別しないマッチングを使用しますStringまたは(U)Int*
返り値
未加工のJSON文字列の配列を返します。Array(String)
例
基本
JSONExtractBool
導入バージョン: v20.1
JSONを解析し、Bool型の値を抽出します。
構文
引数
戻り値
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型の値を抽出します。
構文
引数
戻り値
値が存在する場合はFloat値を返し、存在しない場合は0を返します。Float64
例
使用例
JSONExtractFloatCaseInsensitive
導入バージョン: v25.8
JSONを解析し、大文字小文字を区別しないキーマッチングを使用してFloat型の値を抽出します。この関数はJSONExtractFloatと同様の機能を持ちます。
構文
引数
json— 解析対象のJSON文字列Stringindices_or_keys— オプション。対象フィールドへナビゲートするためのインデックスまたはキー。キーは大文字小文字を区別しないマッチングを使用しますStringまたは(U)Int*
戻り値
抽出されたFloat値を返します。値が見つからない場合または変換できない場合は0を返します。Float64
例
基本的な使用例
JSONExtractInt
導入バージョン: v20.1
JSONを解析し、Int型の値を抽出します。
構文
引数
戻り値
値が存在する場合は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文字列。Stringvalue_type— 値のClickHouseデータ型。Stringindices_or_keys— 文字列または整数のいずれかを指定できる0個以上の引数のリスト。Stringまたは(U)Int*
戻り値
解析されたキーと値のペアを含むタプルの配列を返します。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
例
オブジェクト
JSONExtractString
導入バージョン: v20.1
JSONを解析し、String型の値を抽出します。
構文
引数
戻り値
値が存在する場合はString値を返し、存在しない場合は空文字列を返します。String
例
使用例
JSONExtractStringCaseInsensitive
導入バージョン: v25.8
JSONを解析し、大文字小文字を区別しないキーマッチングを使用して文字列を抽出します。この関数はJSONExtractStringと同様です。
構文
引数
json— 解析するJSON文字列Stringindices_or_keys— オプション。フィールドへナビゲートするためのインデックスまたはキー。キーは大文字小文字を区別しないマッチングを使用しますStringまたは(U)Int*
戻り値
抽出された文字列値を返します。見つからない場合は空文字列を返します。String
例
基本
ネスト構造
JSONExtractUInt
導入バージョン: v20.1
JSONを解析し、UInt型の値を抽出します。
構文
引数
戻り値
値が存在する場合は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, ...]— 有効なJSONを含む1つ以上の文字列。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値の型を文字列として返します。値が存在しない場合はNull=0を返します。Enum
例
使用例
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スカラーとして抽出します。値が存在しない場合、デフォルトでは空文字列が返されます。
この関数は以下の設定によって制御されます:
function_json_value_return_type_allow_nullable=trueを設定すると、NULLが返されます。値が複合型(struct、array、mapなど)の場合、デフォルトでは空文字列が返されます。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カラム。Dynamic
戻り値
各行に格納されている値の型名を返します。NULL値の場合は'None'を返します。String
例
Dynamicカラムの型の検査
isDynamicElementInSharedData
導入バージョン: v24.1
Dynamic列において、個別のサブカラムではなく共有バリアント形式で格納されている行に対してtrueを返します。
Dynamic列にmax_types制限がある場合、この制限を超える値は個別の型付きサブカラムに分離されず、共有バイナリ形式で格納されます。この関数は、どの行がこの共有形式で格納されているかを識別します。
構文
引数
dynamic— 検査対象のDynamic列。Dynamic
戻り値
値が共有バリアント形式で格納されている場合は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という名前のフィールドの値から真偽値を解析します。
結果は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ビット整数以上(例: UInt64やInt128)は、デフォルトで引用符で囲まれます。この動作はoutput_format_json_quote_64bit_integersで制御できます。
特殊値NaNとinfはnullに置き換えられます。これらを表示するには、output_format_json_quote_denormals設定を有効にしてください。
Enum値をシリアライズする際、この関数はその名前を出力します。
関連項目:
構文
引数
value— シリアライズする値。任意のデータ型を指定できます。Any
戻り値
値のJSON表現を返します。String
例
Mapのシリアライズ
特殊値