MariaDBでは、JSON_CONTAINS_PATH()
は、特定のJSONドキュメントに指定されたパスにデータが含まれているかどうかを示す組み込み関数です。
1
を返します ドキュメントに指定されたパス/秒のデータが含まれている場合、0
そうでない場合は、NULL
引数のいずれかがNULL
の場合 。
構文
構文は次のようになります:
JSON_CONTAINS_PATH(json_doc, return_arg, path[, path] ...)
json_doc
の場所 JSONドキュメントとpath
データを検索するパスを指定します。複数のパスを提供できます。
return_arg
引数は、複数のパスを処理する方法を決定します。 one
にすることができます またはall
。
-
one
–関数は1
を返します JSONドキュメント内に少なくとも1つのパスが存在する場合。 all
–関数は1
を返します すべてのパスがJSONドキュメント内に存在する場合のみ。
例
実例を示します。
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.name');
結果:
+-----------------------------------------------------+ | JSON_CONTAINS_PATH(@json_document, 'one', '$.name') | +-----------------------------------------------------+ | 1 | +-----------------------------------------------------+
この場合、パスが存在し、結果は1
になります。 。
次の例では、パスが存在せず、結果は0
になります。 :
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.type');
結果:
+-----------------------------------------------------+ | JSON_CONTAINS_PATH(@json_document, 'one', '$.type') | +-----------------------------------------------------+ | 0 | +-----------------------------------------------------+
複数のパス
ドキュメント内の複数のパスを検索する例を次に示します。
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.type',
'$.weight'
) AS Result;
結果:
+--------+ | Result | +--------+ | 1 | +--------+
この例では、2つのパスを検索しました。一方のパスは存在し、もう一方は存在しません。しかし、1
を取得しました とにかく(肯定的な結果)。これは、one
を使用したためです 2番目の引数として。 one
1
を取得することを指定します パスのいずれかが存在する場合。
all
を使用するとどうなりますか 2番目の引数として:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(
@json_document,
'all',
'$.type',
'$.weight'
) AS Result;
結果:
+--------+ | Result | +--------+ | 0 | +--------+
今回の結果は0
です。 、JSONドキュメントにすべてのパスが存在するわけではないためです。
欠落しているパス($.type
)を変更した場合 )存在するものとは異なる結果が得られます:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(
@json_document,
'all',
'$.name',
'$.weight'
) AS Result;
結果:
+--------+ | Result | +--------+ | 1 | +--------+
配列
特定のインデックスが配列内に存在するかどうかをテストする例を次に示します。
SET @json_document = '
{
"name": "Wag",
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.awards[2]'
) AS Result;
結果:
+--------+ | Result | +--------+ | 1 | +--------+
インデックスを存在しないものに増やすと、次のようになります。
SET @json_document = '
{
"name": "Wag",
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.awards[3]'
) AS Result;
結果:
+--------+ | Result | +--------+ | 0 | +--------+
ネストされた構造
ネストされたドキュメント内のパスを検索する例を次に示します。
SET @json_document = '
{
"name": "Wag",
"specs": {
"weight": 10,
"height": 30
}
}
';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.specs.height'
) AS Result;
結果:
+--------+ | Result | +--------+ | 1 | +--------+
ヌル引数
引数がNULL
の場合 、結果はNULL
です :
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT
JSON_CONTAINS_PATH(null, 'one', '$.weight') AS a,
JSON_CONTAINS_PATH(@json_document, null, '$.weight') AS b,
JSON_CONTAINS_PATH(@json_document, 'one', null) AS c;
結果:
+------+------+------+ | a | b | c | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
パラメータカウントが正しくありません
引数を指定しないとエラーが発生します:
SELECT JSON_CONTAINS_PATH();
結果:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_CONTAINS_PATH'
十分な引数を渡さない場合も同じことが起こります:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(@json_document);
結果:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_CONTAINS_PATH'