Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

JSON_CONTAINS_PATH () Ví dụ trong MySQL

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ử.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các lớp lồng nhau - CustomRowMapper !! Nó không còn là một vấn đề nữa !! - Phần 2

  2. Điều đó có nghĩa là gì khi MySQL ở trạng thái Đang gửi dữ liệu?

  3. chọn số lượng (*) từ bảng mysql trong php

  4. WAMP Không thể truy cập trên mạng cục bộ 403 Bị cấm

  5. Làm cách nào để truy xuất phiên bản hiện tại của hệ quản trị cơ sở dữ liệu MySQL (DBMS)?