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

MariaDB JSON_VALUE () so với JSON_QUERY ():Sự khác biệt là gì?

Trong MariaDB, JSON_VALUE() hàm và JSON_QUERY() hàm làm những việc tương tự - chúng trả về dữ liệu từ tài liệu JSON.

Vậy sự khác biệt là gì?

Sự khác biệt chính là JSON_VALUE() trả về giá trị vô hướng, trong khi JSON_QUERY() trả về mảng và đối tượng.

Định nghĩa

Với một tài liệu JSON, mỗi hàm thực hiện như sau:

  • JSON_VALUE() trả về đại lượng vô hướng được chỉ định bởi đường dẫn.
  • JSON_QUERY() trả về một đối tượng hoặc mảng được chỉ định bởi đường dẫn.

Sự hiểu biết của tôi là nó hoạt động theo cách này do tiêu chuẩn SQL.

Nếu điều này gây ra sự cố cho bạn, bạn có thể tìm thấy JSON_EXTRACT() chức năng hữu ích hơn.

Vô hướng

Dưới đây là một ví dụ để chứng minh điều gì sẽ xảy ra khi chúng tôi cố gắng sử dụng cả hai hàm để trích xuất một đại lượng từ tài liệu JSON.

SET @json_document = '
    { 
        "name" : "Rufus",
        "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
    }
';
SELECT 
    JSON_VALUE(@json_document, '$.name') AS JSON_VALUE,
    JSON_QUERY(@json_document, '$.name') AS JSON_QUERY;

Kết quả:

+------------+------------+
| JSON_VALUE | JSON_QUERY |
+------------+------------+
| Rufus      | NULL       |
+------------+------------+

JSON_VALUE() đã trả về vô hướng như mong đợi, nhưng JSON_QUERY() trả về NULL . Điều này được mong đợi, bởi vì JSON_QUERY() chỉ trả về mảng và đối tượng.

Đó là kết quả tương tự nếu chúng tôi cố gắng trả về dữ liệu vô hướng từ mảng:

SET @json_document = '
    { 
        "name" : "Rufus",
        "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
    }
';
SELECT 
    JSON_VALUE(@json_document, '$.awards[0]') AS JSON_VALUE,
    JSON_QUERY(@json_document, '$.awards[0]') AS JSON_QUERY;

Kết quả:

+------------+------------+
| JSON_VALUE | JSON_QUERY |
+------------+------------+
| Top Dog    | NULL       |
+------------+------------+

Đối tượng

Đây là những gì sẽ xảy ra khi chúng tôi cố gắng sử dụng cả hai hàm để trả về một đối tượng toàn bộ:

SET @json_document = '{ "name" : "Rufus" }';

SELECT 
    JSON_VALUE(@json_document, '$') AS JSON_VALUE,
    JSON_QUERY(@json_document, '$') AS JSON_QUERY;

Kết quả:

+------------+----------------------+
| JSON_VALUE | JSON_QUERY           |
+------------+----------------------+
| NULL       | { "name" : "Rufus" } |
+------------+----------------------+

Lần này là JSON_QUERY() chức năng thành công.

Mảng

Đây là những gì sẽ xảy ra khi chúng tôi cố gắng sử dụng cả hai hàm để trả về toàn bộ một mảng:

SET @json_document = '
    { 
        "name" : "Rufus",
        "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
    }
';
SELECT 
    JSON_VALUE(@json_document, '$.awards') AS JSON_VALUE,
    JSON_QUERY(@json_document, '$.awards') AS JSON_QUERY;

Kết quả:

+------------+------------------------------------------+
| JSON_VALUE | JSON_QUERY                               |
+------------+------------------------------------------+
| NULL       | [ "Top Dog", "Best Dog", "Biggest Dog" ] |
+------------+------------------------------------------+

Xin nhắc lại, JSON_QUERY() chức năng thành công.

Tuy nhiên, không hàm nào thành công khi chúng ta sử dụng toán tử ký tự đại diện mảng để chọn tất cả các phần tử vô hướng từ mảng. Trong trường hợp này, JSON_EXTRACT() đến để giải cứu:

SET @json_document = '
    { 
        "name" : "Rufus",
        "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
    }
';
SELECT 
    JSON_VALUE(@json_document, '$.awards[*]') AS JSON_VALUE,
    JSON_QUERY(@json_document, '$.awards[*]') AS JSON_QUERY,
    JSON_EXTRACT(@json_document, '$.awards[*]') AS JSON_EXTRACT;

Kết quả:

+------------+------------+----------------------------------------+
| JSON_VALUE | JSON_QUERY | JSON_EXTRACT                           |
+------------+------------+----------------------------------------+
| Top Dog    | NULL       | ["Top Dog", "Best Dog", "Biggest Dog"] |
+------------+------------+----------------------------------------+

Tuy nhiên, nếu các phần tử của mảng là mảng hoặc đối tượng thì JSON_QUERY() trả lại chúng tốt:

SET @json_document = '
    { 
        "name" : "Rufus",
        "scores" : [ [1, 2, 3], [8, 9], { "a" : 1 } ] 
    }
';
SELECT 
    JSON_VALUE(@json_document, '$.scores') AS JSON_VALUE,
    JSON_QUERY(@json_document, '$.scores') AS JSON_QUERY;

Kết quả:

+------------+------------------------------------+
| JSON_VALUE | JSON_QUERY                         |
+------------+------------------------------------+
| NULL       | [ [1, 2, 3], [8, 9], { "a" : 1 } ] |
+------------+------------------------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giới thiệu MariaDB Platform X5:cơ sở dữ liệu khối lượng công việc bất kỳ, hiện ở mọi quy mô

  2. DROP BẢNG NẾU TỒN TẠI trong MariaDB

  3. Tài nguyên sao lưu cơ sở dữ liệu MySQL &MariaDB

  4. Cách cài đặt và bảo mật MariaDB trên CentOS 8

  5. Giải thích các đơn vị ngày và giờ tổng hợp MariaDB