説明
この関数は、指定されたJSONドキュメントがターゲットのJSONドキュメントに含まれているか、またはターゲットドキュメントの指定されたパスで指定された要素が見つかるかどうかを検証するために使用されます(path パラメータが提供されている場合)。指定されたJSONドキュメントがターゲットのJSONドキュメントに含まれている場合、この関数は1を返し、そうでない場合は0を返します。
指定されたパスにデータが存在するかどうかのみを確認する必要がある場合は、代わりにJSON_CONTAINS_PATH() を使用してください。
構文
JSON_CONTAINS(target, candidate[, path])
説明
パラメータ candidate はJSONドキュメントを指定し、パラメータ target はターゲットのJSONドキュメントを表します。
いずれかのパラメータが NULL の場合、または path パラメータがターゲットドキュメントの一部として認識されない場合、NULL を返します。
次の場合はエラーが発生します。
candidateまたはtargetパラメータが有効なJSONドキュメントではありません。pathパラメータが有効なパス式ではありません。pathパラメータに * または ** ワイルドカードが含まれています。
この関数は、次のルールに従います。
単一の要素が等しいという前提は、2つのスカラ値のJSON_TYPE() が同じであり、比較可能であることです。数値型の場合は、直接比較できます。
配列については、
candidate配列のすべての要素がtarget配列に含まれている場合に限り、candidate配列はtarget配列に含まれます。オブジェクトについては、
candidateオブジェクトのすべてのkeyがtargetオブジェクトに含まれ、かつ各keyに対応するvalueもターゲットオブジェクトの対応するkeyと同じである場合に限り、candidateオブジェクトはtargetオブジェクトに含まれます。
例
obclient> SET @jn = '{"a": 1, "b": 2, "c": {"d": 4}}';
Query OK, 0 rows affected
obclient> SET @jn2 = '1';
Query OK, 0 rows affected
obclient> SELECT JSON_CONTAINS(@jn, @jn2, '$.a');
+---------------------------------+
| JSON_CONTAINS(@jn, @jn2, '$.a') |
+---------------------------------+
| 1 |
+---------------------------------+
1 row in set
obclient> SELECT JSON_CONTAINS(@jn, @jn2, '$.b');
+---------------------------------+
| JSON_CONTAINS(@jn, @jn2, '$.b') |
+---------------------------------+
| 0 |
+---------------------------------+
1 row in set
obclient> SET @jn2 = '{"d": 4}';
Query OK, 0 rows affected
obclient> SELECT JSON_CONTAINS(@jn, @jn2, '$.a');
+---------------------------------+
| JSON_CONTAINS(@jn, @jn2, '$.a') |
+---------------------------------+
| 0 |
+---------------------------------+
1 row in set
obclient> SELECT JSON_CONTAINS(@jn, @jn2, '$.c');
+---------------------------------+
| JSON_CONTAINS(@jn, @jn2, '$.c') |
+---------------------------------+
| 1 |
+---------------------------------+
1 row in set