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

JSON_VALUE () trong MySQL

Trong MySQL, JSON_VALUE() hàm trích xuất một giá trị từ tài liệu JSON tại đường dẫn được chỉ định.

Hàm đã được giới thiệu trong MySQL 8.0.21.

Cú pháp

Cú pháp như sau:

JSON_VALUE(json_doc, path [RETURNING type] [on_empty] [on_error])

Ở đâu:

on_empty:
    {NULL | ERROR | DEFAULT value} ON EMPTY

on_error:
    {NULL | ERROR | DEFAULT value} ON ERROR

Ví dụ

Dưới đây là một ví dụ đơn giản để chứng minh:

SELECT JSON_VALUE( '{ "name" : "Wag", "type" : "Dog" }', '$.type' );

Kết quả:

Dog

Mảng

Dưới đây là một ví dụ về nhận giá trị từ một mảng:

SELECT JSON_VALUE( '{ "name" : "Wag", "scores" : [ 25, 36, 48 ] }', '$.scores[1]' );

Kết quả:

36

Mảng dựa trên 0, vì vậy 1 trả về phần tử thứ hai (0 sẽ trả về đầu tiên).

Tài liệu được nhúng

Dưới đây là một ví dụ về nhận giá trị từ một đối tượng được nhúng:

SELECT JSON_VALUE(
    '{ 
        "_id" : 1, 
        "details" : { 
            "name" : "Wag",
            "type" : "Dog"
            } 
    }', 
    '$.details.type' 
    );

Kết quả:

Dog

Loại trả lại

Dưới đây là một ví dụ về việc chỉ định kiểu trả về:

SELECT JSON_VALUE(
    '{ 
        "_id" : 1, 
        "details" : { 
            "name" : "Wag",
            "type" : "Dog"
            } 
    }', 
    '$.details' RETURNING json
    );

Kết quả:

{"name": "Wag", "type": "Dog"}

Nếu bạn không chỉ định kiểu trả về, kiểu trả về là VARCHAR(512) .

Kết quả trống

Theo mặc định, nếu không tìm thấy dữ liệu nào tại đường dẫn đã chỉ định, NULL được trả lại:

SELECT JSON_VALUE(
    '{ 
        "name" : "Wag",
        "type" : "Dog"
    }', 
    '$.score'
    );

Kết quả:

NULL

Tuy nhiên, các tùy chọn sau có thể được sử dụng để chỉ định rõ ràng điều gì sẽ xảy ra khi không tìm thấy dữ liệu nào tại đường dẫn đã cho:

  • NULL ON EMPTY :Hàm trả về NULL; đây là hành vi mặc định.
  • DEFAULT value TRÊN EMPTY :giá trị value được cung cấp Được trả lại. Loại của giá trị phải khớp với loại của loại trả về.
  • ERROR ON EMPTY :Hàm báo lỗi.

Ví dụ:

SELECT JSON_VALUE(
    '{ 
        "name" : "Wag",
        "type" : "Dog"
    }', 
    '$.score' 
    DEFAULT 'Nothing found' ON EMPTY
    );

Kết quả:

Nothing found

Lỗi

Phần sau có thể được sử dụng để chỉ định điều gì sẽ xảy ra khi xảy ra lỗi:

  • NULL ON ERROR :JSON_VALUE() trả về NULL; đây là hành vi mặc định.
  • DEFAULT value LỖI BẬT :Đây là giá trị được trả về; giá trị của nó phải khớp với giá trị của kiểu trả về.
  • ERROR ON ERROR :Đã xảy ra lỗi.

Nếu được sử dụng, ON EMPTY phải đặt trước bất kỳ ON ERROR mệnh đề. Việc chỉ định chúng theo thứ tự sai dẫn đến lỗi cú pháp.

Chỉ mục

Như đã đề cập trong ghi chú phát hành MySQL 8.0.21, JSON_VALUE() hàm đơn giản hóa việc tạo chỉ mục trên JSON cột. Cuộc gọi tới JSON_VALUE(json_doc , path QUAY LẠI type ) tương đương với gọi CAST( JSON_UNQUOTE( JSON_EXTRACT(json_doc , path )) AS type ) .

Dưới đây là ví dụ được sử dụng trong ghi chú phát hành:

CREATE TABLE inventory(
    items JSON,
    INDEX i1 ( (JSON_VALUE(items, '$.name' RETURNING CHAR(50))) ),
    INDEX i2 ( (JSON_VALUE(items, '$.price' RETURNING DECIMAL(5,2))) ),
    INDEX i3 ( (JSON_VALUE(items, '$.quantity' RETURNING UNSIGNED)) )
);

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chèn mảng vào cơ sở dữ liệu MySQL bằng PHP

  2. MySQL AUTO_INCREMENT không ROLLBACK

  3. Truy vấn khôi phục MySQL

  4. Sao chép bảng MySQL, chỉ số và dữ liệu

  5. MySQL TEXT so với BLOB và CLOB