メインコンテンツまでスキップ
バージョン: Latest-3.4

JSON 関数と演算子の概要

このトピックでは、StarRocks がサポートする JSON コンストラクタ関数、クエリ関数、処理関数、演算子、およびパス式の概要を説明します。

JSON コンストラクタ関数

JSON コンストラクタ関数は、JSON オブジェクトや JSON 配列などの JSON データを構築するために使用されます。

関数説明戻り値
json_object1 つ以上のキーと値のペアを、辞書順でキーによってソートされた JSON オブジェクトに変換します。SELECT JSON_OBJECT('Daniel Smith', 26, 'Lily Smith', 25);{"Daniel Smith": 26, "Lily Smith": 25}
json_arraySQL 配列の各要素を JSON 値に変換し、それらの JSON 値からなる JSON 配列を返します。SELECT JSON_ARRAY(1, 2, 3);[1,2,3]
parse_json文字列を JSON 値に変換します。SELECT PARSE_JSON('{"a": 1}');{"a": 1}

JSON クエリ関数と処理関数

JSON クエリ関数と処理関数は、JSON データをクエリおよび処理するために使用されます。たとえば、パス式を使用して JSON オブジェクト内の要素を見つけることができます。

関数説明戻り値
arrow functionJSON オブジェクト内のパス式で見つけることができる要素をクエリします。SELECT parse_json('{"a": {"b": 1}}') -> '$.a.b';1
castJSON データ型と SQL データ型の間でデータを変換します。SELECT CAST(1 AS JSON);1
get_json_doubleJSON 文字列内の指定されたパスから浮動小数点値を解析して取得します。SELECT get_json_double('{"k1":1.3, "k2":"2"}', "$.k1");1.3
get_json_intJSON 文字列内の指定されたパスから整数値を解析して取得します。SELECT get_json_int('{"k1":1, "k2":"2"}', "$.k1");1
get_json_stringJSON 文字列内の指定されたパスから文字列を解析して取得します。SELECT get_json_string('{"k1":"v1", "k2":"v2"}', "$.k1");v1
json_queryJSON オブジェクト内のパス式で見つけることができる要素の値をクエリします。SELECT JSON_QUERY('{"a": 1}', '$.a');1
json_eachJSON オブジェクトのトップレベルの要素をキーと値のペアに展開します。SELECT * FROM tj_test, LATERAL JSON_EACH(j);!json_each
json_existsJSON オブジェクトがパス式で見つけることができる要素を含んでいるかどうかを確認します。要素が存在する場合、この関数は 1 を返します。要素が存在しない場合、この関数は 0 を返します。SELECT JSON_EXISTS('{"a": 1}', '$.a'); 1
json_keysJSON オブジェクトからトップレベルのキーを JSON 配列として返します。パスが指定されている場合は、そのパスからトップレベルのキーを返します。SELECT JSON_KEYS('{"a": 1, "b": 2, "c": 3}');["a", "b", "c"]
json_lengthJSON ドキュメントの長さを返します。SELECT json_length('{"Name": "Alice"}');1
json_stringJSON オブジェクトを JSON 文字列に変換します。SELECT json_string(parse_json('{"Name": "Alice"}'));{"Name": "Alice"}

JSON 演算子

StarRocks は、次の JSON 比較演算子をサポートしています: <, <=, >, >=, =, および !=。これらの演算子を使用して JSON データをクエリできます。ただし、IN を使用して JSON データをクエリすることはできません。JSON 演算子の詳細については、JSON operators を参照してください。

JSON パス式

JSON パス式を使用して、JSON オブジェクト内の要素をクエリできます。JSON パス式は STRING データ型です。ほとんどの場合、JSON_QUERY などのさまざまな JSON 関数と一緒に使用されます。StarRocks では、JSON パス式は SQL/JSON パス仕様 に完全には準拠していません。StarRocks でサポートされている JSON パス構文の情報については、次の表を参照してください。この表では、次の JSON オブジェクトを例として使用しています。

{
"people": [{
"name": "Daniel",
"surname": "Smith"
}, {
"name": "Lily",
"surname": "Smith",
"active": true
}]
}
JSON パス記号説明JSON パスの例戻り値
$ルート JSON オブジェクトを示します。'$'{ "people": [ { "name": "Daniel", "surname": "Smith" }, { "name": "Lily", "surname": Smith, "active": true } ] }
.子 JSON オブジェクトを示します。' $.people'[ { "name": "Daniel", "surname": "Smith" }, { "name": "Lily", "surname": Smith, "active": true } ]
[]1 つ以上の配列インデックスを示します。[n] は配列内の n 番目の要素を示します。インデックスは 0 から始まります。
StarRocks 2.5 は多次元配列のクエリをサポートしています。たとえば、["Lucy", "Daniel"], ["James", "Smith"] です。"Lucy" 要素をクエリするには、$.people[0][0] を使用できます。
'$.people [0]'{ "name": "Daniel", "surname": "Smith" }
[*]配列内のすべての要素を示します。'$.people[*].name'["Daniel", "Lily"]
[start: end]配列から要素のサブセットを示します。サブセットは [start, end] インターバルで指定され、終了インデックスで示される要素は含まれません。'$.people[0: 1].name'["Daniel"]