Mysql
 sql >> Baza danych >  >> RDS >> Mysql

JSON_QUOTE() – Jak uciec od znaków w ciągach używanych jako wartości JSON w MySQL

Podczas pracy z JSON i MySQL czasami konieczne może być pominięcie ciągów znaków, aby ich znaki cudzysłowu nie przeszkadzały w interpretacji dokumentu JSON. W takich przypadkach możesz użyć JSON_QUOTE() funkcja ucieczki potencjalnie problematycznych ciągów.

JSON_QUOTE() służy do tworzenia prawidłowego literału ciągu JSON, który można dołączyć do dokumentu JSON. Na przykład możesz chcieć, aby element w tablicy miał tekst null jako literał ciągu zamiast rzeczywistej wartości null. Ta funkcja może służyć do zapewnienia, że ​​tekst zostanie dodany jako literał ciągu, a nie wartość null.

Aby go użyć, po prostu wywołaj funkcję podczas przekazywania ciągu.

Składnia

Składnia wygląda tak:

JSON_QUOTE(string)

Gdzie string jest ciągiem, który ma zostać zmieniony.

Przykład 1 – Podstawowe użycie

Oto przykład do zademonstrowania.

Najpierw spójrzmy, co się dzieje, gdy używamy JSON_ARRAY() funkcja tworzenia tablicy.

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

Wynik:

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

Wynikiem jest tablica zawierająca 3 elementy. Wiemy, że jest to tablica, ponieważ zaczyna się od otwierającego nawiasu kwadratowego ([ ) i kończy się zamykającym nawiasem kwadratowym (] ). Wiemy również, że każdy element jest łańcuchem, ponieważ są otoczone podwójnymi cudzysłowami. Każdy element oddziela przecinek.

Zobaczmy teraz, co się stanie, gdy użyjemy JSON_QUOTE() zamiast tego.

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

Wynik:

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

Nie otrzymujemy tablicy. Dostajemy sznurek. Wiemy, że jest to ciąg znaków, ponieważ zaczyna się i kończy znakiem podwójnego cudzysłowu. Wszelkie podwójne cudzysłowy w ciągu są poprzedzone znakiem odwrotnego ukośnika (\ ).

Jeśli te znaki nie zostały zmienione, pierwszy podwójny cudzysłów (po Hot ) nieumyślnie zakończy ciąg. Dlatego nie bylibyśmy w stanie dołączyć reszty ciągu. Uciekając niektórymi znakami, mówimy MySQL, aby nie interpretował tych znaków w normalny sposób.

Przykład 2 – Liczby

Ta sama koncepcja dotyczy liczb, z wyjątkiem tego, że liczby nie są ujęte w cudzysłów.

Możemy więc stworzyć tablicę zawierającą 3 elementy, z których wszystkie są liczbami.

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

Wynik:

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

A oto, co się stanie, jeśli przełączymy się na JSON_QUOTE() funkcja.

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

Wynik:

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

Otrzymujemy więc ten sam wynik, z tą różnicą, że cała tablica jest ujęta w podwójne cudzysłowy. To sprawia, że ​​jest to łańcuch zamiast tablicy.

Przykład 3 – Dodawanie do tablic/obiektów

Moglibyśmy wziąć ten literał ciągu i dodać go jako element tablicy.

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

Wynik:

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

W tym przypadku literał ciągu jest pierwszym elementem, z 8 i 9 będąc odpowiednio drugim i trzecim elementem.

Możemy również użyć tego literału ciągu w obiekcie.

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

Wynik:

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

Przykład 4 – Wyodrębnianie wartości

Jeśli więc musimy wyodrębnić wartości z naszego dokumentu JSON, zostanie on zinterpretowany jako literał ciągu zamiast tablicy.

Po pierwsze, oto co się stanie, jeśli ustawimy tablicę z trzema liczbami jako oddzielnymi elementami, a następnie wyodrębnimy pierwszy element z tablicy.

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

Wynik:

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

Tak więc ta tablica składa się z trzech elementów – każdy element jest oddzielnym elementem w tablicy.

A oto co się stanie, jeśli użyjemy JSON_QUOTE() aby wszystkie trzy liczby i ich nawiasy kwadratowe zostały przekonwertowane na literał ciągu, dodaj go do tablicy, a następnie wyodrębnij pierwszy element tablicy.

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

Wynik:

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

W tym przypadku tablica składa się tylko z jednego elementu – całego literału ciągu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przeprowadzić migrację z MSSQL do MySQL

  2. Jak ustawić wybraną pozycję w rozwijanym polu?

  3. MySQL łączy dwie kolumny i dodaje do nowej kolumny

  4. Wyjaśnienie struktury wysokiej dostępności MySQL – część II:replikacja półsynchroniczna

  5. Kod błędu:1005. Nie można utworzyć tabeli „...” (errno:150)