MariaDBでは、JSON_LENGTH()
JSONドキュメントの長さを返す組み込み関数です。
この関数を呼び出すときは、JSONドキュメントを引数として指定します。ドキュメント内の値の長さを返すパス引数を指定することもできます。
長さは次のように決定されます:
- スカラーの長さは常に1です。
- 配列の場合、配列内の要素の数。
- オブジェクトの場合、オブジェクト内のメンバーの数。
ネストされた配列またはオブジェクトの長さはカウントされません。
構文
構文は次のようになります:
JSON_LENGTH(json_doc[, path])
json_doc
の場所 はJSONドキュメントであり、path
ドキュメント内のパスを指定するオプションの引数です。
例
実例を示します。
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_LENGTH(@json_document);
結果:
+-----------------------------+ | JSON_LENGTH(@json_document) | +-----------------------------+ | 3 | +-----------------------------+
パスの指定
ドキュメント内のパスを指定する例を次に示します。
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT JSON_LENGTH(@json_document, '$.details');
結果:
+------------------------------------------+ | JSON_LENGTH(@json_document, '$.details') | +------------------------------------------+ | 2 | +------------------------------------------+
前述のように、ネストされたオブジェクトの長さはカウントされないため、2
の結果が得られます。 。
次の例では、レベルを下げて、awards
の長さをカウントします。 オブジェクト:
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT JSON_LENGTH(@json_document, '$.details.awards');
結果:
+-------------------------------------------------+ | JSON_LENGTH(@json_document, '$.details.awards') | +-------------------------------------------------+ | 3 | +-------------------------------------------------+
スカラー
スカラーの長さは常に1
:
SELECT JSON_LENGTH(
'{ "a" : 378, "b" : 45 }',
'$.a'
) AS Result;
結果:
+--------+ | Result | +--------+ | 1 | +--------+
配列
ドキュメントが配列の場合、JSON_LENGTH()
配列内の要素の数をカウントします:
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"scores": [9, 7, 8, 10, 3]
}
';
SELECT JSON_LENGTH(@json_document, '$.scores');
結果:
+-----------------------------------------+ | JSON_LENGTH(@json_document, '$.scores') | +-----------------------------------------+ | 5 | +-----------------------------------------+
存在しないパス
JSONドキュメントに存在しないパスを渡すと、NULL
になります 。
例:
SET @json_document = '
{
"name": "Wag",
"type": "Dog"
}
';
SELECT JSON_LENGTH(@json_document, '$.oops');
結果:
+---------------------------------------+ | JSON_LENGTH(@json_document, '$.oops') | +---------------------------------------+ | NULL | +---------------------------------------+
空のオブジェクト
選択したオブジェクトが空の場合、結果は0
になります。 :
SELECT JSON_LENGTH('{}');
結果:
+-------------------+ | JSON_LENGTH('{}') | +-------------------+ | 0 | +-------------------+
ヌル引数
引数がNULL
の場合 、結果はNULL
です :
SELECT
JSON_LENGTH(null) AS a,
JSON_LENGTH(null, '$.type') AS b,
JSON_LENGTH('{"a":1}', null) AS c;
結果:
+------+------+------+ | a | b | c | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
パラメータカウントが正しくありません
引数を指定しないとエラーが発生します:
SELECT JSON_LENGTH();
結果:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_LENGTH'