Di MySQL, JSON_UNQUOTE()
fungsi “menghapus tanda kutip” dokumen JSON dan mengembalikan hasilnya sebagai utf8mb4
string.
Anda memberikan dokumen JSON sebagai argumen, dan fungsi akan melakukan sisanya.
Sintaks
Sintaksnya seperti ini:
JSON_UNQUOTE(json_val)
Dimana json_val
adalah dokumen JSON yang ingin Anda tanda kutip.
Contoh
Berikut ini contoh untuk didemonstrasikan.
SET @data = '"Homer Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Hasil:
+-----------------+---------------+ | Original | Unquoted | +-----------------+---------------+ | "Homer Simpson" | Homer Simpson | +-----------------+---------------+
Karakter Kabur
Cara fungsi ini menangani karakter escape tergantung pada apakah NO_BACKSLASH_ESCAPES
diaktifkan atau dinonaktifkan.
Saat NO_BACKSLASH_ESCAPES Dinonaktifkan
NO_BACKSLASH_ESCAPES
mode dinonaktifkan secara default di MySQL 8.0.
Inilah yang terjadi jika kami menyertakan \t
untuk menentukan karakter tab dalam string saat NO_BACKSLASH_ESCAPES
dinonaktifkan, dan tanpa menggunakan JSON_UNQUOTE()
.
SET @data = '"Homer \t Simpson"'; SELECT @data Original;
Hasil:
+-------------------+ | Original | +-------------------+ | "Homer Simpson" | +-------------------+
Dan inilah yang terjadi jika kita menggunakan JSON_UNQUOTE()
:
SET @data = '"Homer \t Simpson"'; SELECT JSON_UNQUOTE(@data) Unquoted;
Hasil:
ERROR 3141 (22032): Invalid JSON text in argument 1 to function json_unquote: "Invalid escape character in string." at position 7.
Kita dapat mengatasinya dengan menggunakan dua garis miring terbalik (\\t
). Namun, perlu diingat bahwa melakukan ini akan mengubah hasil jika tidak menggunakan JSON_UNQUOTE()
.
SET @data = '"Homer \\t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Hasil:
+--------------------+-----------------+ | Original | Unquoted | +--------------------+-----------------+ | "Homer \t Simpson" | Homer Simpson | +--------------------+-----------------+
Bila NO_BACKSLASH_ESCAPES Diaktifkan
Inilah yang terjadi ketika kami mengaktifkan NO_BACKSLASH_ESCAPES
sebelum menjalankan pernyataan sebelumnya:
SET @@sql_mode = 'NO_BACKSLASH_ESCAPES'; SET @data = '"Homer \\t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Hasil:
+---------------------+------------------+ | Original | Unquoted | +---------------------+------------------+ | "Homer \\t Simpson" | Homer \t Simpson | +---------------------+------------------+
Dan inilah yang terjadi jika kita menghapus garis miring terbalik pertama:
SET @@sql_mode = 'NO_BACKSLASH_ESCAPES'; SET @data = '"Homer \t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Hasil:
+--------------------+-----------------+ | Original | Unquoted | +--------------------+-----------------+ | "Homer \t Simpson" | Homer Simpson | +--------------------+-----------------+