sql >> Database teknologi >  >> RDS >> Mysql

JSON_UNQUOTE() – Fjern citater fra et JSON-dokument i MySQL

I MySQL er JSON_UNQUOTE() funktionen "uncites" et JSON-dokument og returnerer resultatet som en utf8mb4 streng.

Du angiver JSON-dokumentet som et argument, og funktionen klarer resten.

Syntaks

Syntaksen ser sådan ud:

JSON_UNQUOTE(json_val)

Hvor json_val er det JSON-dokument, du ønsker uden citat.

Eksempel

Her er et eksempel til at demonstrere.

SET @data = '"Homer Simpson"';
SELECT 
  @data Original, 
  JSON_UNQUOTE(@data) Unquoted;

Resultat:

+-----------------+---------------+
| Original        | Unquoted      |
+-----------------+---------------+
| "Homer Simpson" | Homer Simpson |
+-----------------+---------------+

Escape-tegn

Måden denne funktion håndterer escape-tegn på afhænger af, om NO_BACKSLASH_ESCAPES er aktiveret eller deaktiveret.

Når NO_BACKSLASH_ESCAPES er deaktiveret

 NO_BACKSLASH_ESCAPES tilstanden er deaktiveret som standard i MySQL 8.0.

Her er, hvad der sker, hvis vi inkluderer \t for at angive et tabulatortegn i en streng, når NO_BACKSLASH_ESCAPES er deaktiveret og uden ved hjælp af JSON_UNQUOTE() .

SET @data = '"Homer \t Simpson"';
SELECT 
  @data Original;

Resultat:

+-------------------+
| Original          |
+-------------------+
| "Homer 	 Simpson" |
+-------------------+

Og her er, hvad der sker, hvis vi bruger JSON_UNQUOTE() :

SET @data = '"Homer \t Simpson"';
SELECT JSON_UNQUOTE(@data) Unquoted;

Resultat:

ERROR 3141 (22032): Invalid JSON text in argument 1 to function json_unquote: "Invalid escape character in string." at position 7.

Vi kan overvinde dette ved at bruge to omvendte skråstreg (\\t ). Husk dog, at dette vil ændre resultatet, når ikke ved hjælp af JSON_UNQUOTE() .

SET @data = '"Homer \\t Simpson"';
SELECT 
  @data Original, 
  JSON_UNQUOTE(@data) Unquoted;

Resultat:

+--------------------+-----------------+
| Original           | Unquoted        |
+--------------------+-----------------+
| "Homer \t Simpson" | Homer 	 Simpson |
+--------------------+-----------------+

Når NO_BACKSLASH_ESCAPES er aktiveret

Her er, hvad der sker, når vi aktiverer NO_BACKSLASH_ESCAPES før du kører den forrige sætning:

SET @@sql_mode = 'NO_BACKSLASH_ESCAPES';
SET @data = '"Homer \\t Simpson"';
SELECT 
  @data Original, 
  JSON_UNQUOTE(@data) Unquoted;

Resultat:

+---------------------+------------------+
| Original            | Unquoted         |
+---------------------+------------------+
| "Homer \\t Simpson" | Homer \t Simpson |
+---------------------+------------------+

Og her er, hvad der sker, hvis vi fjerner den første skråstreg:

SET @@sql_mode = 'NO_BACKSLASH_ESCAPES';
SET @data = '"Homer \t Simpson"';
SELECT 
  @data Original, 
  JSON_UNQUOTE(@data) Unquoted;

Resultat:

+--------------------+-----------------+
| Original           | Unquoted        |
+--------------------+-----------------+
| "Homer \t Simpson" | Homer 	 Simpson |
+--------------------+-----------------+


  1. Opret en tabel i SQL Server (T-SQL)

  2. Addnode resolv.conf Fejl

  3. Hvordan sletter man mysql-rækken efter tiden er gået?

  4. java.lang.ClassNotFoundException:org.postgresql.Driver, Android