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

MariaDB JSON_SET () Giải thích

Trong MariaDB, JSON_SET() là một chức năng được tích hợp sẵn để cập nhật hoặc chèn dữ liệu vào tài liệu JSON và trả về kết quả.

JSON_SET() có thể cập nhật và chèn dữ liệu, trong khi JSON_INSERT() chỉ có thể chèn dữ liệu và JSON_REPLACE() chỉ có thể cập nhật dữ liệu.

Cú pháp

Cú pháp như sau:

JSON_SET(json_doc, path, val[, path, val] ...)

Ở đâu:

  • json_doc là tài liệu JSON.
  • path là đường dẫn của phần tử để chèn dữ liệu hoặc cập nhật giá trị tại đó.
  • val là giá trị mới.

Ví dụ

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

SET @json = '
    { 
        "name" : "Wag", 
        "type" : "Cat" 
    }
';

SELECT JSON_SET(@json, '$.type', 'Dog');

Kết quả:

+----------------------------------+
| JSON_SET(@json, '$.type', 'Dog') |
+----------------------------------+
| {"name": "Wag", "type": "Dog"}   |
+----------------------------------+

Trong trường hợp này, tôi đã cập nhật giá trị của loại type thành viên Cat thành Dog .

Phần tử mảng

Để cập nhật hoặc chèn một phần tử mảng, hãy chỉ định chỉ mục của phần tử:

SET @json = '
    { 
        "name" : "Wag", 
        "scores" : [8, 0, 9] 
    }
';

SELECT JSON_SET(@json, '$.scores[1]', 7);

Kết quả:

+--------------------------------------+
| JSON_SET(@json, '$.scores[1]', 7)    |
+--------------------------------------+
| {"name": "Wag", "scores": [8, 7, 9]} |
+--------------------------------------+

Trong trường hợp này, phần tử mảng thứ hai đã được cập nhật với giá trị mới. Mảng dựa trên 0 và vì vậy $.scores[1] tham chiếu đến phần tử thứ hai trong mảng.

Chèn dữ liệu

Các ví dụ trước đã cập nhật dữ liệu hiện có. Dưới đây là một ví dụ về cách chèn dữ liệu mới:

SET @json = '
    { 
        "name" : "Wag", 
        "type" : "Dog" 
    }
';

SELECT JSON_SET(@json, '$.weight', 10);

Kết quả:

+----------------------------------------------+
| JSON_SET(@json, '$.weight', 10)              |
+----------------------------------------------+
| {"name": "Wag", "type": "Dog", "weight": 10} |
+----------------------------------------------+

Tại đây, chúng tôi đã chèn một cặp khóa / giá trị mới ("weight": 10 ).

Dưới đây là một ví dụ về việc thêm một phần tử mới vào một mảng:

SET @json = '
    { 
        "name" : "Wag", 
        "scores" : [8, 0, 9] 
    }
';

SELECT JSON_SET(@json, '$.scores[3]', 7);

Kết quả:

+-----------------------------------------+
| JSON_SET(@json, '$.scores[3]', 7)       |
+-----------------------------------------+
| {"name": "Wag", "scores": [8, 0, 9, 7]} |
+-----------------------------------------+

Ví dụ về mảng này cũng có thể được thực hiện với JSON_ARRAY_INSERT() hoặc JSON_ARRAY_APPEND() .

Nhiều đường dẫn

Cú pháp cho phép cài đặt / cập nhật giá trị ở nhiều đường dẫn chỉ với một lệnh gọi tới JSON_SET() .

Ví dụ:

SET @json = '
    { 
        "name" : "Scratch", 
        "type" : "Rat"
    }
';

SELECT JSON_SET(@json, '$.type', 'Cat', '$.weight', 10);

Kết quả:

+--------------------------------------------------+
| JSON_SET(@json, '$.type', 'Cat', '$.weight', 10) |
+--------------------------------------------------+
| {"name": "Scratch", "type": "Cat", "weight": 10} |
+--------------------------------------------------+

Trong ví dụ tiếp theo, chúng tôi chèn một giá trị mới vào một mảng và cập nhật một giá trị khác:

SET @json = '{ "scores" : [ 0, 1, 2 ] }';

SELECT 
    JSON_SET(
        @json, 
        '$.scores[1]', "a", 
        '$.scores[3]', "b"
    ) AS Result;

Kết quả:

+------------------------------+
| Result                       |
+------------------------------+
| {"scores": [0, "a", 2, "b"]} |
+------------------------------+

Đối số rỗng

Nếu json_doc hoặc bất kỳ path đối số là null , kết quả là NULL . Nhưng nếu giá trị type đối số là null , sau đó giá trị được thay thế thành null .

SELECT 
    JSON_SET(null, '$.a', 1) AS a,
    JSON_SET('{"a":1}', null, 1) AS b,
    JSON_SET('{"a":1}', '$.a', null) AS c;

Kết quả:

+------+------+-------------+
| a    | b    | c           |
+------+------+-------------+
| NULL | NULL | {"a": null} |
+------+------+-------------+

Trong ví dụ sau, một trong các đối số đường dẫn bị thiếu trong mỗi lệnh gọi đến JSON_SET() . Trong cả hai trường hợp, kết quả là NULL :

SET @json = '
    { 
        "name" : "Wag", 
        "type" : "Cat" 
    }
';

SELECT 
    JSON_SET(@json, null, 'Bark', '$.type', 'Dog') AS a,
    JSON_SET(@json, '$.name', 'Bark', null, 'Dog') AS b;

Kết quả:

+------+------+
| a    | b    |
+------+------+
| NULL | NULL |
+------+------+

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

Đang gọi JSON_SET() không có đối số dẫn đến lỗi:

SELECT JSON_SET();

Kết quả:

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

Điều này cũng tương tự khi không truyền đủ đối số:

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

Kết quả:

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

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

  2. ClusterControl - Quản lý sao lưu nâng cao - mariabackup Phần I

  3. Cách UUID_SHORT () hoạt động trong MariaDB

  4. Cách MINUTE () hoạt động trong MariaDB

  5. Cách REPLACE () hoạt động trong MariaDB