MariaDBでは、JSON_KEYS()
JSONドキュメントからトップレベルキーの配列を返す組み込み関数です。パスが指定されている場合は、そのパスから最上位のキーが返されます。
指定されたレベルのネストされたサブオブジェクトからキーを除外します。
また、選択したオブジェクトが空の場合は、空の配列が返されます。
構文
構文は次のようになります:
JSON_KEYS(json_doc[, path])
json_doc
の場所 はJSONドキュメントであり、path
ドキュメント内のパスです。
例
実例を示します。
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_KEYS(@json_document);
結果:
+----------------------------+ | JSON_KEYS(@json_document) | +----------------------------+ | ["name", "type", "weight"] | +----------------------------+
パスの指定
ドキュメント内のパスを指定する例を次に示します。
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT JSON_KEYS(
@json_document,
'$.details'
) AS Result;
結果:
+------------------------------+ | Result | +------------------------------+ | ["type", "weight", "awards"] | +------------------------------+
前述のように、サブオブジェクトは結果から除外されます。
存在しないパス
JSONドキュメントに存在しないパスを渡すと、NULL
になります 。
例:
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT JSON_KEYS(
@json_document,
'$.wrong'
) AS Result;
結果:
+--------+ | Result | +--------+ | NULL | +--------+
空のオブジェクト
選択したオブジェクトが空の場合、空の配列が返されます:
SELECT JSON_KEYS('{}');
結果:
+-----------------+ | JSON_KEYS('{}') | +-----------------+ | [] | +-----------------+
ヌル引数
引数がNULL
の場合 、結果はNULL
です :
SELECT
JSON_KEYS(null),
JSON_KEYS(null, '$.type'),
JSON_KEYS('{"a":1}', null);
結果:
+-----------------+---------------------------+----------------------------+ | JSON_KEYS(null) | JSON_KEYS(null, '$.type') | JSON_KEYS('{"a":1}', null) | +-----------------+---------------------------+----------------------------+ | NULL | NULL | NULL | +-----------------+---------------------------+----------------------------+
パラメータカウントが正しくありません
引数を指定しないとエラーが発生します:
SELECT JSON_KEYS();
結果:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_KEYS'
提供する引数が少なすぎても多すぎても同じです:
SELECT JSON_KEYS('{ "a": 1}', 1, 2);
結果:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_KEYS'