Json_unquote mysql

Sẽ xảy ra lỗi nếu giá trị đã cho bắt đầu và kết thúc bằng dấu ngoặc kép và là một chuỗi ký tự JSON không hợp lệ

Nếu giá trị đã cho không phải là chuỗi JSON, giá trị được chuyển qua không sửa đổi

Một số chuỗi ký tự có ý nghĩa đặc biệt trong một chuỗi. Thông thường, dấu gạch chéo ngược bị bỏ qua nhưng các chuỗi thoát trong bảng bên dưới được MariaDB nhận ra, trừ khi Chế độ SQL được đặt thành NO_BACKSLASH_ESCAPES SQL

ví dụ

SELECT JSON_UNQUOTE('"Monty"');
+-------------------------+
| JSON_UNQUOTE('"Monty"') |
+-------------------------+
| Monty                   |
+-------------------------+

Với Chế độ SQL mặc định

SELECT JSON_UNQUOTE('Si\bng\ting');
+-----------------------------+
| JSON_UNQUOTE('Si\bng\ting') |
+-----------------------------+
| Sng	ing                   |
+-----------------------------+

Cài đặt NO_BACKSLASH_ESCAPES

SET @@sql_mode = 'NO_BACKSLASH_ESCAPES';

SELECT JSON_UNQUOTE('Si\bng\ting');
+-----------------------------+
| JSON_UNQUOTE('Si\bng\ting') |
+-----------------------------+
| Si\bng\ting                 |
+-----------------------------+

Bình luận

Nội dung được sao chép trên trang web này là tài sản của chủ sở hữu tương ứng và nội dung này không được MariaDB xem xét trước. Quan điểm, thông tin và ý kiến ​​được thể hiện bởi nội dung này không nhất thiết đại diện cho quan điểm của MariaDB hoặc bất kỳ bên nào khác

Bắt đầu từ Mysql 5. 7. 8, Mysql support kiểu dữ liệu JSON được định nghĩa bởi RFC 7159 , cho phép truy cập vào dữ liệu trong các tài liệu JSON (Javascript Notation Object). Các điểm lợi của việc lưu dữ liệu vào cột định dạng JSON

  • Tự động xác thực các định dạng dữ liệu JSON
  • Tối ưu hóa định dạng lưu trữ
  • Các hàm trong SQL hỗ trợ thao tác với cột dữ liệu JSON như tạo mới, quản lý hay tìm kiếm
  • Chuẩn hóa, hợp nhất JSON dữ liệu

Create JSON Data

Dữ liệu định dạng JSON có 2 dạng phổ biến là Mãng JSON(Array Json) và Đối tượng JSON(Object Json). Mảng Json chứa các giá trị được phân tách với nhau bởi dấu

[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]
{"k1": "value", "k2": [10, 20]}
4 và được đặt bên trong
[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]
{"k1": "value", "k2": [10, 20]}
5 và
[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]
{"k1": "value", "k2": [10, 20]}
6

["abc", 10, null, true, false]

Đối tượng Json chứa tập hợp các cặp khóa - giá trị (key - value) được phân tách với nhau bởi cũng bởi dấu

[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]
{"k1": "value", "k2": [10, 20]}
4 và được đặt bên trong
[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]
{"k1": "value", "k2": [10, 20]}
8 và
[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]
{"k1": "value", "k2": [10, 20]}
9

{"k1": "value", "k2": 10}

Tuy nhiên, với nhiều trường hợp phức tạp, dữ liệu JSON vẫn có dạng lồng nhau (Nesting)

[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]]
{"k1": "value", "k2": [10, 20]}

trong mảng JSON chứ không phải đối tượng JSON và ngược lại. Trong MySQL, các giá trị JSON được viết dưới dạng chuỗi. MySQL phân tích bất kỳ chuỗi nào được sử dụng trong ngữ cảnh yêu cầu giá trị JSON và tạo ra lỗi nếu nó không hợp lệ như JSON. Add a value into JSON dạng cột

mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t1 VALUES('[1, 2,');
ERROR 3140 (22032) at line 2: Invalid JSON text:
"Invalid value." at position 6 in value (or column) '[1, 2,'.

Thao tác với Data JSON Data

  • Hãy tưởng tượng khi bạn muốn lấy bất kỳ giá trị nào trong một cột dữ liệu JSON(tại đây lấy tên giá trị)
mysql> SELECT JSON_EXTRACT('{"id": 14, "name": "Aztalan"}', '$.name');
+---------------------------------------------------------+
| JSON_EXTRACT('{"id": 14, "name": "Aztalan"}', '$.name') |
+---------------------------------------------------------+
| "Aztalan"                                               |
+---------------------------------------------------------+

Ở đây Mysql cung cấp hàm

mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t1 VALUES('[1, 2,');
ERROR 3140 (22032) at line 2: Invalid JSON text:
"Invalid value." at position 6 in value (or column) '[1, 2,'.
0 giúp trả về dữ liệu từ một JSON tài liệu. Dữ liệu được trả về dựa trên đường dẫn cung cấp, trong ví dụ mà chúng ta thấy đường dẫn ở đây là
mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t1 VALUES('[1, 2,');
ERROR 3140 (22032) at line 2: Invalid JSON text:
"Invalid value." at position 6 in value (or column) '[1, 2,'.
1. Tìm hiểu sâu hơn về đường dẫn này nhé.
mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t1 VALUES('[1, 2,');
ERROR 3140 (22032) at line 2: Invalid JSON text:
"Invalid value." at position 6 in value (or column) '[1, 2,'.
2 là ký tự thể hiện tài liệu JSON đang được xem xét ,
mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t1 VALUES('[1, 2,');
ERROR 3140 (22032) at line 2: Invalid JSON text:
"Invalid value." at position 6 in value (or column) '[1, 2,'.
3 chính là tên khóa ta muốn lấy. Tuy nhiên, với các định dạng dữ liệu JSON, đường dẫn lại khác nhau. Với định dạng JSON Mảng, đường dẫn có định dạng
mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t1 VALUES('[1, 2,');
ERROR 3140 (22032) at line 2: Invalid JSON text:
"Invalid value." at position 6 in value (or column) '[1, 2,'.
4 còn đối tượng JSON là
mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t1 VALUES('[1, 2,');
ERROR 3140 (22032) at line 2: Invalid JSON text:
"Invalid value." at position 6 in value (or column) '[1, 2,'.
5,
mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t1 VALUES('[1, 2,');
ERROR 3140 (22032) at line 2: Invalid JSON text:
"Invalid value." at position 6 in value (or column) '[1, 2,'.
6 là vị trí giá trị chúng ta muốn lấy trong mảng và
mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t1 VALUES('[1, 2,');
ERROR 3140 (22032) at line 2: Invalid JSON text:
"Invalid value." at position 6 in value (or column) '[1, 2,'.
7 là tên khóa của giá trị chúng ta muốn lấy

mysql> SELECT JSON_EXTRACT('["abc", 14, "Aztalan"]', '$[0]');
+---------------------------------------------------------+
| JSON_EXTRACT('["abc", 14, "Aztalan"]', '$[0]')          |
+---------------------------------------------------------+
| "abc"                                                   |
+---------------------------------------------------------+

Tuy nhiên, với trường hợp dữ liệu dạng lồng nhau thì đường dẫn của chúng ta không đơn giản như vậy. Cùng xem ví dụ sau nhé

[3, {"a": [5, 6], "b": 10}, [99, 100]]

Đây là một mảng JSON vậy nếu chúng ta muốn lấy giá trị

mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t1 VALUES('[1, 2,');
ERROR 3140 (22032) at line 2: Invalid JSON text:
"Invalid value." at position 6 in value (or column) '[1, 2,'.
8 trong mảng thì đường dẫn sẽ là
mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO t1 VALUES('[1, 2,');
ERROR 3140 (22032) at line 2: Invalid JSON text:
"Invalid value." at position 6 in value (or column) '[1, 2,'.
9 (trong một mảng vị trí đầu tiên sẽ bắt đầu là 0), nhưng nếu chọn giá trị thứ 2 ta sẽ có một đối số . To get the value of the key
mysql> SELECT JSON_EXTRACT('{"id": 14, "name": "Aztalan"}', '$.name');
+---------------------------------------------------------+
| JSON_EXTRACT('{"id": 14, "name": "Aztalan"}', '$.name') |
+---------------------------------------------------------+
| "Aztalan"                                               |
+---------------------------------------------------------+
1 ta will have the path is
mysql> SELECT JSON_EXTRACT('{"id": 14, "name": "Aztalan"}', '$.name');
+---------------------------------------------------------+
| JSON_EXTRACT('{"id": 14, "name": "Aztalan"}', '$.name') |
+---------------------------------------------------------+
| "Aztalan"                                               |
+---------------------------------------------------------+
3. Với tùy trường hợp định dạng dữ liệu JSON ta sẽ có đường dẫn là
mysql> SELECT JSON_EXTRACT('{"id": 14, "name": "Aztalan"}', '$.name');
+---------------------------------------------------------+
| JSON_EXTRACT('{"id": 14, "name": "Aztalan"}', '$.name') |
+---------------------------------------------------------+
| "Aztalan"                                               |
+---------------------------------------------------------+
4 với dạng đối tượng dạng mảng JSON và _______13_______5 dạng đối tượng dạng mới dạng dạng đối tượng dạng lồng JSON

  • Một số hàm phổ biến được Mysql hỗ trợ như
    mysql> SELECT JSON_EXTRACT('{"id": 14, "name": "Aztalan"}', '$.name');
    +---------------------------------------------------------+
    | JSON_EXTRACT('{"id": 14, "name": "Aztalan"}', '$.name') |
    +---------------------------------------------------------+
    | "Aztalan"                                               |
    +---------------------------------------------------------+
    
    6,
    mysql> SELECT JSON_EXTRACT('{"id": 14, "name": "Aztalan"}', '$.name');
    +---------------------------------------------------------+
    | JSON_EXTRACT('{"id": 14, "name": "Aztalan"}', '$.name') |
    +---------------------------------------------------------+
    | "Aztalan"                                               |
    +---------------------------------------------------------+
    
    7,
    mysql> SELECT JSON_EXTRACT('{"id": 14, "name": "Aztalan"}', '$.name');
    +---------------------------------------------------------+
    | JSON_EXTRACT('{"id": 14, "name": "Aztalan"}', '$.name') |
    +---------------------------------------------------------+
    | "Aztalan"                                               |
    +---------------------------------------------------------+
    
    8 hay
    mysql> SELECT JSON_EXTRACT('{"id": 14, "name": "Aztalan"}', '$.name');
    +---------------------------------------------------------+
    | JSON_EXTRACT('{"id": 14, "name": "Aztalan"}', '$.name') |
    +---------------------------------------------------------+
    | "Aztalan"                                               |
    +---------------------------------------------------------+
    
    9
mysql> SET @j = '["a", {"b": [true, false]}, [10, 20]]';

JSON_SET () instead of the value for the đường dẫn tồn tại và bổ sung các giá trị cho đường dẫn không tồn tại

mysql> SELECT JSON_SET(@j, '$[1].b[0]', 1, '$[2][2]', 2);
+--------------------------------------------+
| JSON_SET(@j, '$[1].b[0]', 1, '$[2][2]', 2) |
+--------------------------------------------+
| ["a", {"b": [1, false]}, [10, 20, 2]]      |
+--------------------------------------------+

JSON_INSERT () thêm các giá trị mới nhưng không thay thế các giá trị hiện có

mysql> SELECT JSON_INSERT(@j, '$[1].b[0]', 1, '$[2][2]', 2);
+-----------------------------------------------+
| JSON_INSERT(@j, '$[1].b[0]', 1, '$[2][2]', 2) |
+-----------------------------------------------+
| ["a", {"b": [true, false]}, [10, 20, 2]]      |
+-----------------------------------------------+

JSON_REPLACE () instead of the current value andbỏ qua các giá trị mới

{"k1": "value", "k2": 10}
0

JSON_REMOVE () lấy một tài liệu JSON và một hoặc nhiều đường dẫn chỉ các giá trị sẽ bị xóa khỏi tài liệu. Giá trị trả về là tài liệu gốc trừ đi các giá trị được lựa chọn bởi các đường dẫn tồn tại trong tài liệu

{"k1": "value", "k2": 10}
1

Trên hết là một số kiến ​​thức cơ bản về định dạng dữ liệu JSON trong MYSQL mình thấy cần thiết nhất, hy vọng sẽ hữu ích với các bạn