Trong MySQL, JSON_UNQUOTE()
hàm “bỏ dấu ngoặc kép” một tài liệu JSON và trả về kết quả dưới dạng utf8mb4
chuỗi.
Bạn cung cấp tài liệu JSON làm đối số và hàm sẽ thực hiện phần còn lại.
Cú pháp
Cú pháp như sau:
JSON_UNQUOTE(json_val)
Ở đâu json_val
là tài liệu JSON mà bạn muốn không được trích dẫn.
Ví dụ
Đây là một ví dụ để chứng minh.
SET @data = '"Homer Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Kết quả:
+-----------------+---------------+ | Original | Unquoted | +-----------------+---------------+ | "Homer Simpson" | Homer Simpson | +-----------------+---------------+
Ký tự thoát
Cách hàm này xử lý các ký tự thoát phụ thuộc vào việc NO_BACKSLASH_ESCAPES
được bật hoặc tắt.
Khi NO_BACKSLASH_ESCAPES bị tắt
NO_BACKSLASH_ESCAPES
chế độ bị tắt theo mặc định trong MySQL 8.0.
Đây là những gì sẽ xảy ra nếu chúng tôi bao gồm \t
để chỉ định một ký tự tab trong một chuỗi khi NO_BACKSLASH_ESCAPES
bị vô hiệu hóa và không có sử dụng JSON_UNQUOTE()
.
SET @data = '"Homer \t Simpson"'; SELECT @data Original;
Kết quả:
+-------------------+ | Original | +-------------------+ | "Homer Simpson" | +-------------------+
Và đây là những gì sẽ xảy ra nếu chúng tôi sử dụng JSON_UNQUOTE()
:
SET @data = '"Homer \t Simpson"'; SELECT JSON_UNQUOTE(@data) Unquoted;
Kết quả:
ERROR 3141 (22032): Invalid JSON text in argument 1 to function json_unquote: "Invalid escape character in string." at position 7.
Chúng tôi có thể khắc phục điều này bằng cách sử dụng hai dấu gạch chéo ngược (\\t
). Tuy nhiên, hãy nhớ rằng làm điều này sẽ thay đổi kết quả khi không sử dụng JSON_UNQUOTE()
.
SET @data = '"Homer \\t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Kết quả:
+--------------------+-----------------+ | Original | Unquoted | +--------------------+-----------------+ | "Homer \t Simpson" | Homer Simpson | +--------------------+-----------------+
Khi NO_BACKSLASH_ESCAPES được Bật
Đây là những gì sẽ xảy ra khi chúng tôi bật NO_BACKSLASH_ESCAPES
trước khi chạy câu lệnh trước:
SET @@sql_mode = 'NO_BACKSLASH_ESCAPES'; SET @data = '"Homer \\t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Kết quả:
+---------------------+------------------+ | Original | Unquoted | +---------------------+------------------+ | "Homer \\t Simpson" | Homer \t Simpson | +---------------------+------------------+
Và đây là những gì sẽ xảy ra nếu chúng ta xóa dấu gạch chéo ngược đầu tiên:
SET @@sql_mode = 'NO_BACKSLASH_ESCAPES'; SET @data = '"Homer \t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Kết quả:
+--------------------+-----------------+ | Original | Unquoted | +--------------------+-----------------+ | "Homer \t Simpson" | Homer Simpson | +--------------------+-----------------+