Khi làm việc với JSON và MySQL, đôi khi bạn có thể cần phải thoát các chuỗi để các ký tự trích dẫn của chúng không cản trở việc diễn giải tài liệu JSON. Trong những trường hợp như vậy, bạn có thể sử dụng JSON_QUOTE()
chức năng để thoát khỏi các chuỗi có thể có vấn đề.
JSON_QUOTE()
được sử dụng để tạo ra một ký tự chuỗi JSON hợp lệ có thể được đưa vào tài liệu JSON. Ví dụ:bạn có thể muốn một phần tử trong mảng có văn bản null
dưới dạng một chuỗi ký tự, thay vì có giá trị null thực tế. Hàm này có thể được sử dụng để đảm bảo rằng văn bản được thêm vào dưới dạng một chuỗi ký tự, thay vì một giá trị rỗng.
Để sử dụng nó, chỉ cần gọi hàm trong khi truyền vào chuỗi.
Cú pháp
Cú pháp như sau:
JSON_QUOTE (chuỗi)
Ở đâu string
là chuỗi được thoát.
Ví dụ 1 - Cách sử dụng cơ bản
Đây là một ví dụ để chứng minh.
Trước tiên, hãy xem điều gì sẽ xảy ra khi chúng ta sử dụng JSON_ARRAY()
hàm tạo một mảng.
CHỌN JSON_ARRAY ("Nóng", "Ấm", "Lạnh") NHƯ 'Kết quả';
Kết quả:
+ ------------------------- + | Kết quả | + ------------------------- + | ["Nóng", "Ấm", "Lạnh"] | + ------------------------- +
Kết quả là một mảng có 3 phần tử. Chúng tôi biết đó là một mảng vì nó bắt đầu bằng dấu ngoặc vuông mở ([
) và kết thúc bằng dấu ngoặc vuông đóng (]
). Chúng tôi cũng biết rằng mỗi phần tử là một chuỗi, vì chúng được bao quanh bởi dấu ngoặc kép. Dấu phẩy phân tách từng phần tử.
Bây giờ, hãy xem điều gì sẽ xảy ra khi chúng ta sử dụng JSON_QUOTE()
thay vào đó.
SELECT JSON_QUOTE ('"Hot", "Warm", "Cold"') AS 'Kết quả';
Kết quả:
+ ------------------------------- + | Kết quả | + ------------------------------- + | "\" Nóng \ ", \" Ấm \ ", \" Lạnh \ "" | + ----------------------------- - +
Chúng tôi không nhận được một mảng. Chúng tôi nhận được một chuỗi. Chúng tôi biết đó là một chuỗi vì nó bắt đầu và kết thúc bằng một ký tự dấu ngoặc kép. Bất kỳ dấu ngoặc kép nào trong chuỗi được thoát bằng ký tự dấu gạch chéo ngược (\
).
Nếu các ký tự này không được thoát, thì dấu ngoặc kép đầu tiên (sau Hot
) sẽ vô tình kết thúc chuỗi. Do đó, chúng tôi sẽ không thể bao gồm phần còn lại của chuỗi. Bằng cách thoát các ký tự nhất định, chúng tôi đang yêu cầu MySQL không giải thích các ký tự đó như bình thường.
Ví dụ 2 - Số
Khái niệm tương tự cũng áp dụng cho các số, ngoại trừ các số không được đặt trong dấu ngoặc kép.
Vì vậy, chúng ta có thể tạo một mảng chứa 3 phần tử, tất cả đều là số.
CHỌN JSON_ARRAY (1, 2, 3) LÀM 'Kết quả';
Kết quả:
+ ----------- + | Kết quả | + ----------- + | [1, 2, 3] | + ----------- +
Và đây là những gì sẽ xảy ra nếu chúng ta chuyển sang JSON_QUOTE()
chức năng.
SELECT JSON_QUOTE ('[1, 2, 3]') AS 'Result';
Kết quả:
+ ------------- + | Kết quả | + ------------- + | "[1, 2, 3]" | + ------------- +
Vì vậy, chúng tôi nhận được cùng một kết quả, ngoại trừ toàn bộ mảng được đặt trong dấu ngoặc kép. Điều này làm cho nó thành một chuỗi thay vì một mảng.
Ví dụ 3 - Thêm vào Mảng / Đối tượng
Chúng ta có thể lấy chuỗi này theo nghĩa đen và thêm nó dưới dạng một phần tử trong một mảng.
CHỌN JSON_ARRAY (JSON_QUOTE ('[1, 2, 3]'), 8, 9) NHƯ 'Kết quả';
Kết quả:
+ ------------------------- + | Kết quả | + ------------------------- + | ["\" [1, 2, 3] \ "", 8, 9] | + ------------------------- +
Trong trường hợp này, chuỗi ký tự là phần tử đầu tiên, với 8
và 9
lần lượt là phần tử thứ hai và thứ ba.
Chúng tôi cũng có thể sử dụng chuỗi ký tự này trong một đối tượng.
SELECT JSON_OBJECT ('Key', JSON_QUOTE ('[1, 2, 3]')) AS 'Result';
Kết quả:
+ -------------------------- + | Kết quả | + -------------------------- + | {"Khóa":"\" [1, 2, 3] \ ""} | + -------------------------- +Ví dụ 4 - Trích xuất Giá trị
Vì vậy, nếu chúng ta cần trích xuất các giá trị từ tài liệu JSON của mình, nó sẽ được hiểu là một chuỗi ký tự thay vì một mảng.
Đầu tiên, đây là điều sẽ xảy ra nếu chúng ta đặt một mảng có ba số là các phần tử riêng biệt, sau đó trích xuất phần tử đầu tiên khỏi mảng.
SET @ data1 =JSON_ARRAY (1, 2, 3); SELECT @ data1 AS '@ data1', JSON_EXTRACT (@ data1, '$ [0]');Kết quả:
+ ----------- + ------------------------------ + | @ data1 | JSON_EXTRACT (@ data1, '$ [0]') | + ----------- + -------------------------- ------ + | [1, 2, 3] | 1 | + ----------- + ------------------------------ +Vì vậy, mảng này bao gồm ba phần tử - mỗi phần tử là một phần tử riêng biệt trong mảng.
Bây giờ, đây là điều sẽ xảy ra nếu chúng ta sử dụng
JSON_QUOTE()
để chuyển đổi tất cả ba số và dấu ngoặc vuông của chúng thành một chuỗi ký tự, hãy thêm số đó vào mảng, sau đó trích xuất phần tử đầu tiên của mảng.SET @ data2 =JSON_ARRAY (JSON_QUOTE ('[1, 2, 3]')); SELECT @ data2 AS '@ data2', JSON_EXTRACT (@ data2, '$ [0]');Kết quả:
+ ------------------- + -------------------------- ---- + | @ data2 | JSON_EXTRACT (@ data2, '$ [0]') | + ------------------- + ------------------ -------------- + | ["\" [1, 2, 3] \ ""] | "\" [1, 2, 3] \ "" | + ------------------- + --------------- --------------- +Vì vậy, trong trường hợp này, mảng chỉ bao gồm một phần tử - toàn bộ chuỗi ký tự.