sql >> Database >  >> RDS >> Mysql

JSON_QUOTE() – Hoe te ontsnappen aan tekens in tekenreeksen die worden gebruikt als JSON-waarden in MySQL

Wanneer u met JSON en MySQL werkt, moet u soms strings escapen, zodat hun aanhalingstekens de interpretatie van het JSON-document niet verstoren. In dergelijke gevallen kunt u de JSON_QUOTE() . gebruiken functie om te ontsnappen aan potentieel problematische tekenreeksen.

JSON_QUOTE() wordt gebruikt om een ​​geldige JSON-tekenreeks te produceren die in een JSON-document kan worden opgenomen. U wilt bijvoorbeeld dat een element in een array de tekst null . heeft als een letterlijke tekenreeks, in plaats van een werkelijke null-waarde te hebben. Deze functie kan worden gebruikt om ervoor te zorgen dat de tekst wordt toegevoegd als een letterlijke tekenreeks in plaats van een null-waarde.

Om het te gebruiken, roept u gewoon de functie aan terwijl u de tekenreeks doorgeeft.

Syntaxis

De syntaxis gaat als volgt:

JSON_QUOTE(string)

Waar string is de string die moet worden escaped.

Voorbeeld 1 – Basisgebruik

Hier is een voorbeeld om te demonstreren.

Laten we eerst eens kijken wat er gebeurt als we de JSON_ARRAY() . gebruiken functie om een ​​array te maken.

SELECT JSON_ARRAY("Hot", "Warm", "Cold") AS 'Result';

Resultaat:

+-------------------------+
| Result                  |
+-------------------------+
| ["Hot", "Warm", "Cold"] |
+-------------------------+

Het resultaat is een array die 3 elementen bevat. We weten dat het een array is omdat het begint met een vierkant haakje openen ([ ) en eindigt met een afsluitend vierkant haakje (] ). We weten ook dat elk element een string is, omdat ze tussen dubbele aanhalingstekens staan. Een komma scheidt elk element.

Laten we nu eens kijken wat er gebeurt als we de JSON_QUOTE() . gebruiken in plaats daarvan.

SELECT JSON_QUOTE('"Hot", "Warm", "Cold"') AS 'Result';

Resultaat:

+-------------------------------+
| Result                        |
+-------------------------------+
| "\"Hot\", \"Warm\", \"Cold\"" |
+-------------------------------+

We krijgen geen array. We krijgen een touwtje. We weten dat het een string is omdat deze begint en eindigt met een dubbel aanhalingsteken. Dubbele aanhalingstekens binnen de tekenreeks worden geëscaped met het backslash-teken (\ ).

Als deze tekens geen escapetekens hebben, wordt het eerste dubbele aanhalingsteken (na Hot ) zou de string per ongeluk beëindigen. Daarom zouden we de rest van de string niet kunnen opnemen. Door bepaalde tekens te escapen, vertellen we MySQL om die tekens niet te interpreteren zoals normaal.

Voorbeeld 2 – Cijfers

Hetzelfde concept is van toepassing op getallen, behalve dat getallen niet tussen dubbele aanhalingstekens staan.

We kunnen dus een array maken die 3 elementen bevat, allemaal getallen.

SELECT JSON_ARRAY(1, 2, 3) AS 'Result';

Resultaat:

+-----------+
| Result    |
+-----------+
| [1, 2, 3] |
+-----------+

En dit is wat er gebeurt als we overschakelen naar de JSON_QUOTE() functie.

SELECT JSON_QUOTE('[1, 2, 3]') AS 'Result';

Resultaat:

+-------------+
| Result      |
+-------------+
| "[1, 2, 3]" |
+-------------+

We krijgen dus hetzelfde resultaat, behalve dat de hele array tussen dubbele aanhalingstekens staat. Dit maakt het een string in plaats van een array.

Voorbeeld 3 – Toevoegen aan arrays/objecten

We zouden deze string letterlijk kunnen nemen en als een element in een array kunnen toevoegen.

SELECT JSON_ARRAY(JSON_QUOTE('[1, 2, 3]'), 8, 9) AS 'Result';

Resultaat:

+-------------------------+
| Result                  |
+-------------------------+
| ["\"[1, 2, 3]\"", 8, 9] |
+-------------------------+

In dit geval is de letterlijke tekenreeks het eerste element, met 8 en 9 respectievelijk het tweede en derde element zijn.

We zouden deze letterlijke tekenreeks ook in een object kunnen gebruiken.

SELECT JSON_OBJECT('Key', JSON_QUOTE('[1, 2, 3]')) AS 'Result';

Resultaat:

+--------------------------+
| Result                   |
+--------------------------+
| {"Key": "\"[1, 2, 3]\""} |
+--------------------------+

Voorbeeld 4 – Waarden extraheren

Dus als we waarden uit ons JSON-document moeten halen, wordt het geïnterpreteerd als een letterlijke tekenreeks in plaats van een array.

Ten eerste, dit is wat er gebeurt als we een array instellen met de drie getallen als afzonderlijke elementen en vervolgens het eerste element uit de array extraheren.

SET @data1 = JSON_ARRAY(1, 2, 3);
SELECT 
  @data1 AS '@data1',
  JSON_EXTRACT(@data1, '$[0]');

Resultaat:

+-----------+------------------------------+
| @data1    | JSON_EXTRACT(@data1, '$[0]') |
+-----------+------------------------------+
| [1, 2, 3] | 1                            |
+-----------+------------------------------+

Deze array bestaat dus uit drie elementen – elk element is een afzonderlijk element in de array.

Dit is wat er gebeurt als we JSON_QUOTE() gebruiken om alle drie de getallen en hun vierkante haken om te zetten in een letterlijke tekenreeks, voeg je dat toe aan de array en extraheer je het eerste element van de array.

SET @data2 = JSON_ARRAY(JSON_QUOTE('[1, 2, 3]'));
SELECT 
  @data2 AS '@data2',
  JSON_EXTRACT(@data2, '$[0]');

Resultaat:

+-------------------+------------------------------+
| @data2            | JSON_EXTRACT(@data2, '$[0]') |
+-------------------+------------------------------+
| ["\"[1, 2, 3]\""] | "\"[1, 2, 3]\""              |
+-------------------+------------------------------+

Dus in dit geval bestaat de array uit slechts één element:de hele letterlijke tekenreeks.


  1. Wat is MySQL? – Een inleiding tot databasebeheersystemen

  2. Echte database-object-ID verbergen in url's

  3. Null-waarden sorteren na alle andere, behalve speciaal

  4. Datum selecteren zonder tijd in SQL