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

MariaDB JSON_EXTRACT () Giải thích

Trong MariaDB, JSON_EXTRACT() là một chức năng tích hợp để trích xuất dữ liệu từ tài liệu JSON, dựa trên một hoặc các đường dẫn nhất định.

Nó có thể trả về giá trị đơn và nhiều giá trị. Nếu một giá trị duy nhất được so khớp, thì một giá trị duy nhất sẽ được trả về. Nếu nhiều giá trị được so khớp, thì những giá trị đó được trả về trong một mảng.

Cú pháp

Cú pháp như sau:

JSON_EXTRACT(json_doc, path[, path] ...)

Ở đâu json_doc là tài liệu JSON và mỗi path đối số là một đường dẫn trong tài liệu.

Ví dụ

Đây là một ví dụ để chứng minh.

SET @json_document = '
    { 
        "name": "Wag", 
        "type": "Dog", 
        "weight": 20 
    }
';
SELECT JSON_EXTRACT(@json_document, '$.name');

Kết quả:

+----------------------------------------+
| JSON_EXTRACT(@json_document, '$.name') |
+----------------------------------------+
| "Wag"                                  |
+----------------------------------------+

Nhiều đường dẫn

Dưới đây là một ví dụ về việc chỉ định nhiều đường dẫn để trả về nhiều giá trị từ tài liệu JSON.

Khi bạn trả về nhiều giá trị, chúng sẽ được trả về trong một mảng.

SET @json_document = '
    { 
        "name": "Wag", 
        "type": "Dog", 
        "weight": 20 
    }
';
SELECT JSON_EXTRACT(@json_document, '$.name', '$.weight');

Kết quả:

+----------------------------------------------------+
| JSON_EXTRACT(@json_document, '$.name', '$.weight') |
+----------------------------------------------------+
| ["Wag", 20]                                        |
+----------------------------------------------------+

Đường dẫn không tồn tại

Chuyển một đường dẫn không tồn tại trong tài liệu JSON dẫn đến NULL .

Ví dụ:

SET @json_document = '
    { 
        "name": "Wag", 
        "type": "Dog", 
        "weight": 20 
    }
';
SELECT JSON_EXTRACT(@json_document, '$.color');

Kết quả:

+-----------------------------------------+
| JSON_EXTRACT(@json_document, '$.color') |
+-----------------------------------------+
| NULL                                    |
+-----------------------------------------+

Tuy nhiên, nếu nhiều đường dẫn được chuyển qua và ít nhất một trong số chúng khớp với nhau, thì giá trị khớp sẽ được trích xuất và trả về trong một mảng. Điều này đúng ngay cả khi chỉ một giá trị được trích xuất.

Ví dụ:

SET @json_document = '
    { 
        "name": "Wag", 
        "type": "Dog", 
        "weight": 20 
    }
';
SELECT JSON_EXTRACT(@json_document, '$.name', '$.color');

Kết quả:

+---------------------------------------------------+
| JSON_EXTRACT(@json_document, '$.name', '$.color') |
+---------------------------------------------------+
| ["Wag"]                                           |
+---------------------------------------------------+

Mảng

Dưới đây là một ví dụ về trích xuất dữ liệu từ một mảng:

SET @json_document = '
    { 
        "_id" : 1, 
        "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
    }
';
SELECT JSON_EXTRACT(@json_document, '$.awards[0]');

Kết quả:

+---------------------------------------------+
| JSON_EXTRACT(@json_document, '$.awards[0]') |
+---------------------------------------------+
| "Top Dog"                                   |
+---------------------------------------------+

Mảng dựa trên 0 và vì vậy $.awards[0] trích yếu tố đầu tiên của awards mảng.

Đối tượng lồng nhau

Dưới đây là một ví dụ về trích xuất dữ liệu từ một đối tượng được lồng bên trong một đối tượng khác:

SET @json_document = '
    { 
        "_id" : 1, 
        "name" : "Wag", 
        "details" : {
            "type" : "Dog", 
            "weight" : 20,
            "awards" : { 
                "Florida Dog Awards" : "Top Dog", 
                "New York Marathon" : "Fastest Dog", 
                "Sumo 2020" : "Biggest Dog"
            }
        }
    }
';
SELECT JSON_EXTRACT(
    @json_document, 
    '$.details.awards.New York Marathon'
    ) AS Result;

Kết quả:

+---------------+
| Result        |
+---------------+
| "Fastest Dog" |
+---------------+

Tuy nhiên, nếu chúng tôi muốn trích xuất tất cả các giải thưởng, chúng tôi có thể rút ngắn đường dẫn đến $.details.awards :

SET @json_document = '
    { 
        "_id" : 1, 
        "name" : "Wag", 
        "details" : {
            "type" : "Dog", 
            "weight" : 20,
            "awards" : { 
                "Florida Dog Awards" : "Top Dog", 
                "New York Marathon" : "Fastest Dog", 
                "Sumo 2020" : "Biggest Dog"
            }
        }
    }
';
SELECT JSON_EXTRACT(
    @json_document, 
    '$.details.awards'
    ) AS Result;

Kết quả:

+---------------------------------------------------------------------------------------------------+
| Result                                                                                            |
+---------------------------------------------------------------------------------------------------+
| {"Florida Dog Awards": "Top Dog", "New York Marathon": "Fastest Dog", "Sumo 2020": "Biggest Dog"} |
+---------------------------------------------------------------------------------------------------+

Kiểm tra trước kết quả

Chúng tôi có thể làm cho kết quả dễ đọc hơn bằng cách chuyển JSON_EXTRACT() vào JSON_DETAILED() chức năng:

SET @json_document = '
    { 
        "_id" : 1, 
        "name" : "Wag", 
        "details" : {
            "type" : "Dog", 
            "weight" : 20,
            "awards" : { 
                "Florida Dog Awards" : "Top Dog", 
                "New York Marathon" : "Fastest Dog", 
                "Sumo 2020" : "Biggest Dog"
            }
        }
    }
';
SELECT 
    JSON_DETAILED(
        JSON_EXTRACT(
            @json_document, 
            '$.details.awards'
            ) 
    ) AS Result;

Kết quả:

+------------------------------------------------+
| Result                                         |
+------------------------------------------------+
| {
    "Florida Dog Awards": "Top Dog",
    "New York Marathon": "Fastest Dog",
    "Sumo 2020": "Biggest Dog"
} |
+------------------------------------------------+

Đối số rỗng

Nếu bất kỳ đối số nào là NULL , kết quả là NULL :

SELECT 
    JSON_EXTRACT(null, '$.type'),
    JSON_EXTRACT('{"a":1}', null);

Kết quả:

+------------------------------+-------------------------------+
| JSON_EXTRACT(null, '$.type') | JSON_EXTRACT('{"a":1}', null) |
+------------------------------+-------------------------------+
| NULL                         | NULL                          |
+------------------------------+-------------------------------+

Đếm tham số không chính xác

Không cung cấp đối số dẫn đến lỗi:

SELECT JSON_EXTRACT();

Kết quả:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_EXTRACT'

Điều này cũng xảy ra tương tự khi bạn cung cấp quá ít hoặc quá nhiều đối số:

SELECT JSON_EXTRACT('{ "a": 1}');

Kết quả:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_EXTRACT'

  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ách ORD () hoạt động trong MariaDB

  2. Đặt Bộ ký tự và đối chiếu của cơ sở dữ liệu trong MariaDB

  3. MariaDB JSON_REMOVE () Giải thích

  4. Khắc phục:Quyền truy cập bị từ chối đối với người dùng ‘root’ @ ’localhost’ trong MariaDB

  5. 8 chức năng để trả lại một ngày từ một ngày trong MariaDB