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

MariaDB JSON_INSERT () Giải thích

Trong MariaDB, JSON_INSERT() là một hàm tích hợp để chèn dữ liệu vào tài liệu JSON và trả về kết quả.

Cú pháp

Cú pháp như sau:

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

Ở đâu json_doc là tài liệu JSON, path là đường dẫn nơi dữ liệu sẽ được chèn và val là giá trị được chèn tại đường dẫn đó.

Ví dụ

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

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

Kết quả:

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

Ở đây tôi đã chèn "type": "Dog" vào tài liệu.

Trong trường hợp này, tôi đã sử dụng $.type như đường dẫn. Do đó, type là chìa khóa và Dog là giá trị.

Khi đường dẫn đã tồn tại

Việc chuyển một đường dẫn đã tồn tại trong tài liệu JSON dẫn đến tài liệu gốc được trả về không thay đổi.

Ví dụ:

SET @json_document = '
    { 
        "name": "Wag"
    }
';
SELECT JSON_INSERT(@json_document, '$.name', "Bark");

Kết quả:

+-----------------------------------------------+
| JSON_INSERT(@json_document, '$.name', "Bark") |
+-----------------------------------------------+
| {"name": "Wag"}                               |
+-----------------------------------------------+

Chèn mảng

Dưới đây là một ví dụ về chèn một mảng vào tài liệu JSON:

SET @json_document = '
    { 
        "name" : "Wag"
    }
';
SELECT JSON_INSERT(@json_document, '$.scores', '[ 8, 7, 9 ]');

Kết quả:

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

Nối vào Mảng

Đây là một ví dụ về việc sử dụng JSON_INSERT() để nối dữ liệu vào một mảng:

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

Kết quả:

+--------------------------------------------------------------+
| JSON_INSERT(@json_document, '$.awards[2]', "Biggest Dog")    |
+--------------------------------------------------------------+
| {"_id": 1, "awards": ["Top Dog", "Best Dog", "Biggest Dog"]} |
+--------------------------------------------------------------+

Tuy nhiên, mặc dù nó hoạt động tốt cho ví dụ này, nó có thể dễ dàng bị lỗi. Ví dụ:nếu chúng tôi cố gắng chèn giá trị vào một vị trí khác trong mảng, nó không hoạt động:

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

Kết quả:

+-----------------------------------------------------------+
| JSON_INSERT(@json_document, '$.awards[1]', "Biggest Dog") |
+-----------------------------------------------------------+
| {"_id": 1, "awards": ["Top Dog", "Best Dog"]}             |
+-----------------------------------------------------------+

Để chèn các giá trị vào một mảng, hãy sử dụng JSON_ARRAY_INSERT() chức năng thay thế.

Ngoài ra, mặc dù chúng tôi có thể nối một giá trị vào một mảng trong ví dụ trên, nhưng có lẽ bạn nên sử dụng JSON_ARRAY_APPEND() vì nó được thiết kế đặc biệt cho mục đích đó.

Đối tượng lồng nhau

Dưới đây là một ví dụ về việc chèn một giá trị vào 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"
            }
        }
    }
';
SELECT JSON_INSERT(
    @json_document, 
    '$.details.awards.Sumo 2020',
    'Biggest Dog'
    );

Kết quả:

{"_id": 1, "name": "Wag", "details": {"type": "Dog", "weight": 20, "awards": {"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ể sử dụng JSON_DETAILED() để làm cho kết quả dễ đọc hơn:

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

Kết quả:

{
    "_id": 1,
    "name": "Wag",
    "details": 
    {
        "type": "Dog",
        "weight": 20,
        "awards": 
        {
            "Florida Dog Awards": "Top Dog",
            "New York Marathon": "Fastest Dog",
            "Sumo 2020": "Biggest Dog"
        }
    }
}

Đối số rỗng

Nếu một trong hai json_document hoặc path đối số là NULL , kết quả là NULL :

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

Kết quả:

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

Tuy nhiên, nếu giá trị value đối số là NULL , khóa được thêm vào đường dẫn được chỉ định, với giá trị null :

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

Kết quả:

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

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

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

SELECT JSON_INSERT();

Kết quả:

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

Đ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_INSERT('{ "a": 1}');

Kết quả:

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

Các chức năng tương tự

JSON_REPLACE() chức năng có thể cập nhật dữ liệu hiện có.

JSON_SET() chức năng có thể cập nhật dữ liệu hiện có và chèn dữ liệu mới. Vì vậy, JSON_SET() giống như JSON_INSERT()JSON_REPLACE() trong một chức năng.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng MyRocks Storage Engine với MariaDB Server

  2. Tránh khóa nhà cung cấp cơ sở dữ liệu cho MySQL hoặc MariaDB

  3. Cách thức hoạt động của DIV trong MariaDB

  4. Danh sách đầy đủ các đối chiếu được hỗ trợ bởi MariaDB

  5. Đo điểm chuẩn Triển khai cơ sở dữ liệu thủ công so với Triển khai tự động