MySQLでは、JSON_CONTAINS_PATH() 関数は、指定されたパスが指定されたJSONドキュメントにあるかどうかをテストします。
パスが見つかった場合は、JSON_CONTAINS_PATH() 1を返します 、それ以外の場合は、0を返します 。
構文
構文は次のようになります:
JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)
json_docの場所 JSONドキュメント、one_or_all キーワードone またはall (1を返す前に、パスが1つだけ存在する必要があるのか、すべてのパスが存在する必要があるのかを示すため )、およびpath 実際のパスです。
例1-基本的な使用法
基本的な使用法を示す例を次に示します。
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a') AS Result;
結果:
+--------+ | Result | +--------+ | 1 | +--------+
パス$.a JSONドキュメントに存在するため、結果は1になります。 。 oneを使用しました 2番目の引数としてですが、この場合、allを指定した場合、同じ結果が得られます。 。
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a') AS Result;
結果:
+--------+ | Result | +--------+ | 1 | +--------+
存在しないパスを指定すると、0になります。 。例:
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.z') AS Result;
結果:
+--------+ | Result | +--------+ | 0 | +--------+
例2–複数のパス
次の例では、2つのパスを指定します。
最初の例では、一方のパスは存在しますが、もう一方は存在しません。しかし、私はoneを使用しているので 2番目の引数として、結果は正です(少なくとも1つのパスが存在するため)。
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a', '$.z') AS Result;
結果:
+--------+ | Result | +--------+ | 1 | +--------+
oneを切り替えると all 否定的な結果が得られます。
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a', '$.z') AS Result;
結果:
+--------+ | Result | +--------+ | 0 | +--------+
これは、allが原因です キーワードでは、1を返す前に、すべてのパスがJSONドキュメントに存在する必要があります 。
例3–ドット表記
ドット表記を使用して、JSONドキュメント内の特定のパスを示すことができます。
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c.d') AS Result;
結果:
+--------+ | Result | +--------+ | 1 | +--------+
例4–アレイ
アレイの例をいくつか示します。
最初の例は肯定的な結果を返します。
SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[0]') AS Result;
結果:
+--------+ | Result | +--------+ | 1 | +--------+
次の例は否定的な結果を返します。
SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[3]') AS Result;
結果:
+--------+ | Result | +--------+ | 0 | +--------+
配列はゼロベースの番号付けを使用するため、これは負の値を返します。したがって、パス$.c[3] 4番目の要素を表しますが、配列には3つの要素しか含まれていません。