このトピックでは、JSON 関数の構文について説明し、例を示します。
Simple Log Service は、次の JSON 関数をサポートしています。
Simple Log Service のクエリ文では、文字列を単一引用符 (') で囲む必要があります。単一引用符で囲まれていない文字、または二重引用符 ("") で囲まれている文字は、フィールド名または列名として扱われます。たとえば、
'status'は文字列 'status' を表しますが、statusまたは"status"は 'status' という名前のログフィールドを表します。ログフィールドの値が JSON フォーマットであり、それを複数の行に展開する必要がある場合は、UNNEST 構文を使用します。詳細については、「UNNEST 句」をご参照ください。
文字列を JSON として解析できない場合、関数は null を返します。
JSON ログが収集中に切り捨てられた場合、JSON 関数を使用するとエラーが発生し、クエリが中止されます。このエラーを処理するには、TRY 式を使用して例外をキャッチします。これにより、クエリを続行できます。たとえば、
* | select message, try(json_parse(message))です。詳細については、「TRY 式」をご参照ください。
関数名 | 構文 | 説明 | SQL サポート | SPL サポート |
json_array_contains(x, value) | JSON 配列に特定の値が含まれているかどうかを確認します。 | √ | √ | |
json_array_get(x, index) | JSON 配列内の指定されたインデックスにある要素を返します。 | √ | × | |
json_array_length(x) | JSON 配列内の要素数を計算します。 | √ | √ | |
json_extract(x, json_path) | JSON オブジェクトまたは JSON 配列から、配列またはオブジェクトにすることができる JSON 値のセットを抽出します。 | √ | √ | |
json_extract_scalar(x, json_path) | JSON オブジェクトまたは JSON 配列から、文字列、整数、ブール値などのスカラー値のセットを抽出します。この関数は json_extract 関数に似ています。 | √ | √ | |
json_extract_bool(x, json_path) | JSON オブジェクトまたは JSON 配列からブール値を抽出します。 | √ | × | |
json_extract_long(x, json_path) | JSON オブジェクトまたは JSON 配列から bigint 値を抽出します。 | √ | × | |
json_extract_double(x, json_path) | JSON オブジェクトまたは JSON 配列から double 値を抽出します。 | √ | × | |
json_format(x) | JSON オブジェクトを文字列に変換します。 | √ | √ | |
json_parse(x) | 文字列を JSON オブジェクトに変換します。 | √ | √ | |
json_size(x, json_path) | JSON オブジェクトまたは配列内の要素数を計算します。 | √ | √ | |
json_object_flatten(x) | JSON オブジェクトを単一層のキーと値のペアの構造にフラット化します。 | √ | × |
json_array_contains 関数
json_array_contains 関数は、JSON 配列に特定の値が含まれているかどうかを確認します。
構文
json_array_contains(x, value)パラメーター
パラメーター | 説明 |
x | パラメーター値は JSON 配列です。 |
value | 数値。 |
戻り値の型
boolean
例
この例では、JSON 配列 [1, 2, 3] に値 2 が含まれているかどうかを確認します。
クエリ文 (テスト)
* | SELECT json_array_contains('[1, 2, 3]', 2)クエリ結果

json_array_get 関数
json_array_get 関数は、JSON 配列内の指定されたインデックスにある要素を返します。
構文
json_array_get(x, index)パラメーター
パラメーター | 説明 |
x | パラメーター値は JSON 配列です。 |
index | JSON 要素のインデックス。インデックスは 0 から始まります。 |
戻り値の型
varchar
例
この例では、JSON 配列 ["a", [3, 9], "c"] からインデックス 1 の要素を返します。
クエリ文 (テスト)
* | SELECT json_array_get('["a", [3, 9], "c"]', 1)クエリ結果

json_array_length 関数
json_array_length 関数は、JSON 配列内の要素数を計算します。
構文
json_array_length(x)パラメーター
パラメーター | 説明 |
x | パラメーター値は JSON 配列です。 |
戻り値の型
bigint
例
例 1: この例では、Results フィールド内の JSON 要素の数を計算します。
フィールドの例
Results:[{"EndTime":1626314920},{"FireResult":2}]クエリ文
* | SELECT json_array_length(Results)クエリ結果

例 2: この例では、time フィールド内の JSON 要素の数を計算します。
フィールドの例
time:["time_local","request_time","upstream_response_time"]クエリ文
* | SELECT json_array_length(time)クエリ結果

json_extract 関数
json_extract 関数は、JSON オブジェクトまたは JSON 配列から、配列またはオブジェクトにすることができる JSON 値のセットを抽出します。
json_extract 関数は、無効な JSON 型に対してエラーを報告します。このような場合は、代わりに json_extract_scalar 関数を使用してください。
構文
json_extract(x, json_path)パラメーター
パラメーター | 説明 |
x | パラメーター値は JSON オブジェクトまたは JSON 配列です。 |
json_path | JSON パス (例: $.store.book[0].title)。詳細については、「json_path の設定」をご参照ください。 |
戻り値の型
JSON フォーマットの文字列。
例
SQL
この例では、Results フィールドから EndTime フィールドの値を抽出します。
フィールドの例
Results:[{"EndTime":1626314920},{"FireResult":2}]クエリ文
* | SELECT json_extract(Results, '$.0.EndTime')クエリ結果

SPL
この例では、Results フィールドから EndTime フィールドの値を抽出します。
フィールドの例
Results:[{"EndTime":1626314920},{"FireResult":2}]SPL 文
* | extend a = json_extract(Results, '$.0.EndTime')SPL 結果

json_extract_scalar 関数
json_extract_scalar 関数は、JSON オブジェクトまたは JSON 配列から、文字列、整数、ブール値などのスカラー値を抽出します。
構文
json_extract_scalar(x, json_path)パラメーター
パラメーター | 説明 |
x | パラメーター値は JSON オブジェクトまたは JSON 配列です。 |
json_path | JSON パス (例: $.store.book[0].title)。詳細については、「json_path の設定」をご参照ください。 |
戻り値の型
varchar
例
SQL
この例では、Results フィールドから RawResultCount フィールドの値を抽出し、その値を bigint 型に変換して合計を計算します。
フィールドの例
Results:[{"EndTime":1626314920},{"RawResultCount":1}]クエリ文
* | SELECT sum(cast(json_extract_scalar(Results,'$.1.RawResultCount') AS bigint) )クエリ結果

SPL
この例では、Results フィールドから RawResultCount フィールドの値を抽出します。
フィールドの例
Results:[{"EndTime":1626314920},{"RawResultCount":1}]SPL 文
* | extend a = json_extract_scalar(Results, '$.1.RawResultCount')SPL 結果

json_extract_bool 関数
json_extract_bool 関数は、JSON オブジェクトまたは JSON 配列からブール値を抽出します。値を抽出できない場合は、null が返されます。
構文
json_extract_bool(x, json_path)パラメーター
パラメーター | 説明 |
x | パラメーター値は JSON 型です。 |
json_path | JSON パス (例: $.store.book[0].title)。詳細については、「json_path の設定」をご参照ください。 |
戻り値の型
boolean
例
この例では、JSON 配列 Results からブール値を抽出します。
フィールドの例
Results:[{"ret":true},{"status":FALSE}]クエリ文
* | SELECT json_extract_bool(Results, '$.0.ret')クエリ結果

json_extract_long 関数
json_extract_long 関数は、JSON オブジェクトまたは JSON 配列から bigint 値を抽出します。値を抽出できない場合は、null が返されます。
構文
json_extract_long(x, json_path)パラメーター
パラメーター | 説明 |
x | パラメーター値は JSON 型です。 |
json_path | JSON パス (例: $.store.book[0].title)。詳細については、「json_path の設定」をご参照ください。 |
戻り値の型
bigint
例
この例では、JSON 配列 Results から bigint 値を抽出します。
フィールドの例
Results:[{"EndTime":1626314920},{"FireResult":2}]クエリ文
* | SELECT json_extract_long(Results, '$.0.EndTime')クエリ結果

json_extract_double 関数
json_extract_double 関数は、JSON オブジェクトまたは JSON 配列から double 値を抽出します。値を抽出できない場合は、null が返されます。
構文
json_extract_double(x, json_path)パラメーター
パラメーター | 説明 |
x | パラメーター値は JSON 型です。 |
json_path | JSON パス (例: $.store.book[0].title)。詳細については、「json_path の設定」をご参照ください。 |
戻り値の型
double
例
この例では、JSON 配列 Results から double 値を抽出します。
サンプル フィールド
Results:[{"EndTime":1626314920},{"FireResult":2}]クエリ文
* | SELECT json_extract_double(Results, '$.0.EndTime')クエリ結果

json_format 関数
json_format 関数は、JSON オブジェクトを文字列に変換します。
構文
json_format(x)パラメーター
パラメーター | 説明 |
x | パラメーター値は JSON 型です。 |
戻り値の型
varchar
例
この例では、JSON 配列 [1,2,3] を文字列 '[1, 2, 3]' に変換します。
クエリ文 (テスト)
* | SELECT json_format(json_parse('[1, 2, 3]'))クエリ結果

json_parse 関数
json_parse 関数は、文字列を JSON 型に変換し、その文字列が有効な JSON フォーマットであることを検証します。JSON オブジェクトから値を抽出するには、json_extract_scalar 関数を使用します。
構文
json_parse(x)パラメーター
パラメーター | 説明 |
x | パラメーター値は文字列です。 |
戻り値の型
JSON
例
SQL
SPL
この例では、文字列 [1,2,3] を JSON 配列 [1, 2, 3] に変換します。
SPL 文
* | extend a = json_parse('[1, 2, 3]')SPL 結果

json_size 関数
json_size 関数は、JSON オブジェクトまたは JSON 配列内の要素数を計算します。
構文
json_size(x, json_path)パラメーター
パラメーター | 説明 |
x | パラメーター値は JSON オブジェクトまたは JSON 配列です。 |
json_path | JSON パス (例: $.store.book[0].title)。詳細については、「json_path の設定」をご参照ください。 |
戻り値の型
bigint
例
この例では、status フィールド内の要素数を返します。
フィールドの例
Results:[{"EndTime":1626314920,"FireResult":2,"RawResults":[{"_col0":"1094"}]}]クエリ文
* | SELECT json_size(Results, '$.0.RawResults')クエリ結果

json_object_flatten 関数
json_object_flatten 関数は、JSON オブジェクトを単一層のキーと値のペアの構造にフラット化します。
構文
json_object_flatten(x)パラメーター
パラメーター | 説明 |
x | パラメーター値は JSON 型です。JSON オブジェクトがオブジェクトでない場合、null が返されます。 |
戻り値の型
map(varchar, varchar)
例
この例では、content フィールドの JSON コンテンツを単一層のキーと値のペアにフラット化します。
フィールドの例
content: '{"Time":1626314920,"Info":[{"count":"1"}],"Body":"this is test"}'クエリ文
select json_object_flatten(content) as data from (values '{"Time":1626314920,"Info":[{"count":"1"}],"Body":"this is test"}') t (content) limit 1;出力

