sql >> Database >  >> RDS >> Mysql

JSON_UNQUOTE() – Verwijder aanhalingstekens uit een JSON-document in MySQL

In MySQL is de JSON_UNQUOTE() functie "unquote" een JSON-document en retourneert het resultaat als een utf8mb4 tekenreeks.

U geeft het JSON-document op als argument en de functie doet de rest.

Syntaxis

De syntaxis gaat als volgt:

JSON_UNQUOTE(json_val)

Waar json_val is het JSON-document dat u niet-geciteerd wilt hebben.

Voorbeeld

Hier is een voorbeeld om te demonstreren.

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

Resultaat:

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

Escape-tekens

De manier waarop deze functie escape-tekens verwerkt, hangt af van of NO_BACKSLASH_ESCAPES is ingeschakeld of uitgeschakeld.

Als NO_BACKSLASH_ESCAPES is uitgeschakeld

De NO_BACKSLASH_ESCAPES modus is standaard uitgeschakeld in MySQL 8.0.

Dit is wat er gebeurt als we \t include opnemen om een ​​tab-teken in een tekenreeks op te geven wanneer NO_BACKSLASH_ESCAPES is uitgeschakeld, en zonder met behulp van JSON_UNQUOTE() .

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

Resultaat:

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

En dit is wat er gebeurt als we JSON_UNQUOTE() gebruiken :

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

Resultaat:

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

We kunnen dit oplossen door twee backslashes te gebruiken (\\t ). Houd er echter rekening mee dat dit de uitkomst zal veranderen wanneer niet met behulp van JSON_UNQUOTE() .

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

Resultaat:

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

Als NO_BACKSLASH_ESCAPES is ingeschakeld

Dit is wat er gebeurt als we NO_BACKSLASH_ESCAPES inschakelen voordat u de vorige instructie uitvoert:

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

Resultaat:

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

En dit is wat er gebeurt als we de eerste backslash verwijderen:

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

Resultaat:

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


  1. Bereken het aantal records voor elke datum tussen 2 datums

  2. Hoe we databases gebruiken in ons dagelijks leven

  3. Gegevenstype van veld ophalen in select-instructie in ORACLE

  4. Query schrijven voor meerdere tabellen in php