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つの要素しか含まれていません。