json_length
JSON ドキュメントの長さを返します。パスが指定されている場合、この関数はそのパスで特定された値の長さを返します。
ドキュメントの長さは以下のルールに従って決定されます:
-
スカラー値の長さは 1 です。例えば、
1
、"a"
、true
、false
、null
の長さは 1 です。 -
配列の長さは配列要素の数です。例えば、
[1, 2]
の長さは 2 です。 -
オブジェクトの長さはオブジェクトメンバーの数です。例えば、
{"a": 1}
の長さは 1 です。 -
ネストされた配列やオブジェクトの長さはカウントされません。例えば、
{"a": [1, 2]}
の長さは 1 です。ネストされた配列[1, 2]
は長さに計算されません。
構文
json_length(json_doc[, path])
パラメータ
json_doc
: 必須、長さを返す対象の JSON ドキュメント。
path
: 任意。ドキュメント内の値の長さを返すために使用されます。パスは通常 $
で始まり、.
をパスの区切りとして使用します。[]
は配列の添字として使用され、0 から始まります。
戻り値
INT 型の値を返します。
JSON ドキュメントが有効なドキュメントでない場合、エラーが返されます。
以下のいずれかのシナリオでは 0 が返されます:
-
path
がドキュメント内の値を特定しない場合。 -
パスが有効なパス式でない場合。
-
パスに
*
または**
ワイルドカードが含まれている場合。
例
例 1: スカラー値の長さを返します。
select json_length('1');
+------------------+
| json_length('1') |
+------------------+
| 1 |
+------------------+
例 2: 空のオブジェクトの長さを返します。
select json_length('{}');
+-------------------+
| json_length('{}') |
+-------------------+
| 0 |
+-------------------+
例 3: データを持つオブジェクトの長さを返します。
select json_length('{"Name": "Homer"}');
+----------------------------------+
| json_length('{"Name": "Homer"}') |
+----------------------------------+
| 1 |
+----------------------------------+
例 4: JSON 配列の長さを返します。
select json_length('[1, 2, 3]');
+--------------------------+
| json_length('[1, 2, 3]') |
+--------------------------+
| 3 |
+--------------------------+
例 5: 一つの要素がネストされた配列を持つ JSON 配列の長さを返します。
ネストされた配列 [3, 4]
は長さに計算されません。
select json_length('[1, 2, [3, 4]]');
+-------------------------------+
| json_length('[1, 2, [3, 4]]') |
+-------------------------------+
| 3 |
+-------------------------------+
例 6: パス $.Person
で指定されたオブジェクトの長さを返します。
SET @file = '{
"Person": {
"Name": "Homer",
"Age": 39,
"Hobbies": ["Eating", "Sleeping"]
}
}';
select json_length(@file, '$.Person') 'Result';
例 7: パス $.y
で指定された値の長さを返します。
select json_length('{"x": 1, "y": [1, 2]}', '$.y');
+---------------------------------------------+
| json_length('{"x": 1, "y": [1, 2]}', '$.y') |
+---------------------------------------------+
| 2 |
+---------------------------------------------+