sql >> Databasteknik >  >> RDS >> Mysql

JSON_UNQUOTE() – Ta bort citat från ett JSON-dokument i MySQL

I MySQL, JSON_UNQUOTE() funktionen "avciterar" ett JSON-dokument och returnerar resultatet som en utf8mb4 sträng.

Du tillhandahåller JSON-dokumentet som ett argument, och funktionen gör resten.

Syntax

Syntaxen ser ut så här:

JSON_UNQUOTE(json_val)

Där json_val är det JSON-dokument du vill ha utan citat.

Exempel

Här är ett exempel att visa.

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

Resultat:

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

Escape-tecken

Hur den här funktionen hanterar escape-tecken beror på om NO_BACKSLASH_ESCAPES är aktiverad eller inaktiverad.

När NO_BACKSLASH_ESCAPES är inaktiverat

 NO_BACKSLASH_ESCAPES läget är inaktiverat som standard i MySQL 8.0.

Så här händer om vi inkluderar \t för att ange ett tabbtecken i en sträng när NO_BACKSLASH_ESCAPES är inaktiverad och utan med JSON_UNQUOTE() .

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

Resultat:

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

Och här är vad som händer om vi använder 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 övervinna detta genom att använda två omvända snedstreck (\\t ). Tänk dock på att detta kommer att ändra resultatet när inte med 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 är aktiverat

Här är vad som händer när vi aktiverar NO_BACKSLASH_ESCAPES innan du kör föregående programsats:

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 |
+---------------------+------------------+

Och här är vad som händer om vi tar bort det första snedstrecket:

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. Hur date_trunc() fungerar i PostgreSQL

  2. SQL Server BCP export skadad fil?

  3. NYHETER:Ny Microsoft SQL Server Native Client 18 släppt!

  4. nvarchar-konkatenering / index / nvarchar(max) oförklarligt beteende