Trong MySQL, JSON_CONTAINS_PATH()
chức năng kiểm tra xem có tìm thấy đường dẫn cụ thể trong tài liệu JSON đã cho hay không.
Nếu đường dẫn được tìm thấy, JSON_CONTAINS_PATH()
trả về 1
, nếu không nó trả về 0
.
Cú pháp
Cú pháp như sau:
JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)
Ở đâu json_doc
là tài liệu JSON, one_or_all
là từ khóa one
hoặc all
(để cho biết liệu chỉ cần một đường dẫn tồn tại hay tất cả các đường dẫn phải tồn tại trước khi trả về 1
) và path
là đường dẫn thực tế.
Ví dụ 1 - Cách sử dụng cơ bản
Dưới đây là một ví dụ để chứng minh cách sử dụng cơ bản.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a') AS Result;
Kết quả:
+--------+ | Result | +--------+ | 1 | +--------+
Đường dẫn $.a
tồn tại trong tài liệu JSON và do đó, kết quả là 1
. Chúng tôi đã sử dụng one
là đối số thứ hai nhưng trong trường hợp này, chúng tôi sẽ nhận được cùng một kết quả nếu chúng tôi đã chỉ định all
.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a') AS Result;
Kết quả:
+--------+ | Result | +--------+ | 1 | +--------+
Nếu chúng tôi chỉ định một đường dẫn không tồn tại, chúng tôi nhận được 0
. Ví dụ:
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.z') AS Result;
Kết quả:
+--------+ | Result | +--------+ | 0 | +--------+
Ví dụ 2 - Nhiều Đường dẫn
Trong các ví dụ sau, chúng tôi chỉ định hai đường dẫn.
Trong ví dụ đầu tiên, một đường dẫn tồn tại nhưng đường dẫn kia thì không. Nhưng vì tôi sử dụng one
như đối số thứ hai, kết quả là dương (vì ít nhất một trong các đường dẫn tồn tại).
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a', '$.z') AS Result;
Kết quả:
+--------+ | Result | +--------+ | 1 | +--------+
Nếu chúng ta chuyển one
đến all
chúng tôi nhận được một kết quả âm tính.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a', '$.z') AS Result;
Kết quả:
+--------+ | Result | +--------+ | 0 | +--------+
Điều này là do all
từ khóa yêu cầu tất cả các đường dẫn phải tồn tại trong tài liệu JSON trước khi nó trả về 1
.
Ví dụ 3 - Ký hiệu dấu chấm
Bạn có thể sử dụng ký hiệu dấu chấm để chỉ ra các đường dẫn cụ thể trong tài liệu JSON.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c.d') AS Result;
Kết quả:
+--------+ | Result | +--------+ | 1 | +--------+
Ví dụ 4 - Mảng
Dưới đây là một số ví dụ về mảng.
Ví dụ đầu tiên trả về kết quả dương tính.
SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[0]') AS Result;
Kết quả:
+--------+ | Result | +--------+ | 1 | +--------+
Ví dụ tiếp theo trả về kết quả âm.
SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[3]') AS Result;
Kết quả:
+--------+ | Result | +--------+ | 0 | +--------+
Điều này trả về số âm vì mảng sử dụng đánh số dựa trên số không. Do đó, đường dẫn $.c[3]
đại diện cho phần tử thứ tư, nhưng mảng chỉ chứa ba phần tử.