sql >> Databáze >  >> RDS >> Mysql

JSON_QUOTE() – Jak uniknout ze znaků v řetězcích používaných jako hodnoty JSON v MySQL

Při práci s JSON a MySQL může být někdy nutné ukončit řetězce, aby jejich znaky uvozovek nerušily interpretaci dokumentu JSON. V takových případech můžete použít JSON_QUOTE() funkce pro únik z potenciálně problematických řetězců.

JSON_QUOTE() se používá k vytvoření platného řetězcového literálu JSON, který lze zahrnout do dokumentu JSON. Můžete například chtít, aby prvek v poli měl text null jako řetězcový literál, spíše než mít skutečnou hodnotu null. Tuto funkci lze použít k zajištění toho, že text bude přidán jako řetězcový literál, nikoli jako nulová hodnota.

Chcete-li ji použít, jednoduše zavolejte funkci při předávání řetězce.

Syntaxe

Syntaxe vypadá takto:

JSON_QUOTE(řetězec)

Kde string je řetězec, který má být escapován.

Příklad 1 – Základní použití

Zde je příklad k demonstraci.

Nejprve se podívejme, co se stane, když použijeme JSON_ARRAY() funkce k vytvoření pole.

SELECT JSON_ARRAY("Horké", "Teplé", "Studené") JAKO 'Výsledek';

Výsledek:

+-------------------------+| Výsledek |+-------------------------+| ["Horké", "Teplé", "Studené"] |+-------------------------+

Výsledkem je pole, které obsahuje 3 prvky. Víme, že se jedná o pole, protože začíná hranatou závorkou ([ ) a končí hranatou závorkou (] ). Víme také, že každý prvek je řetězec, protože je obklopen dvojitými uvozovkami. Každý prvek odděluje čárka.

Nyní se podívejme, co se stane, když použijeme JSON_QUOTE() místo toho.

SELECT JSON_QUOTE('"Horké", "Teplé", "Studené"') AS 'Výsledek';

Výsledek:

+-------------------------------+| Výsledek |+-------------------------------+| "\"Horké\", \"Teplé\", \"Studené\"" |+------------------------------ --+

Nezískáme pole. Získáme provázek. Víme, že je to řetězec, protože začíná a končí znakem dvojitých uvozovek. Jakékoli dvojité uvozovky v řetězci jsou ukončeny znakem zpětného lomítka (\ ).

Pokud tyto znaky nebyly escapovány, první dvojitá uvozovka (po Hot ) by neúmyslně ukončilo řetězec. Proto bychom nemohli zahrnout zbytek řetězce. Escapováním určitých znaků říkáme MySQL, aby tyto znaky neinterpretovalo jako normálně.

Příklad 2 – Čísla

Stejný koncept platí pro čísla s tím rozdílem, že čísla nejsou uzavřena do dvojitých uvozovek.

Můžeme tedy vytvořit pole, které obsahuje 3 prvky, z nichž všechny jsou čísla.

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

Výsledek:

+------------+| Výsledek |+-----------+| [1, 2, 3] |+------------+

A co se stane, když přepneme na JSON_QUOTE() funkce.

SELECT JSON_QUOTE('[1, 2, 3]') AS 'Výsledek';

Výsledek:

+--------------+| Výsledek |+--------------+| "[1, 2, 3]" |+--------------+

Dostaneme tedy stejný výsledek, až na to, že celé pole je uzavřeno do dvojitých uvozovek. To z něj dělá řetězec namísto pole.

Příklad 3 – Přidání do polí/objektů

Mohli bychom vzít tento řetězcový literál a přidat jej jako prvek v poli.

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

Výsledek:

+-------------------------+| Výsledek |+-------------------------+| ["\"[1, 2, 3]\"", 8, 9] |+-------------------------+

V tomto případě je řetězcový literál prvním prvkem s 8 a 9 je druhým a třetím prvkem.

Tento řetězcový literál bychom také mohli použít v objektu.

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

Výsledek:

+--------------------------+| Výsledek |+--------------------------+| {"Klíč":"\"[1, 2, 3]\""} |+--------------------------+ 

Příklad 4 – Extrahování hodnot

Pokud tedy potřebujeme extrahovat hodnoty z našeho dokumentu JSON, bude to interpretováno jako řetězcový literál namísto pole.

Nejprve si ukážeme, co se stane, když pole se třemi čísly nastavíme jako samostatné prvky a poté z pole vyjmeme první prvek.

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

Výsledek:

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

Toto pole se tedy skládá ze tří prvků – každý prvek je samostatný prvek v poli.

Nyní se podívejme, co se stane, když použijeme JSON_QUOTE() chcete-li všechna tři čísla a jejich hranaté závorky převést na řetězcový literál, přidejte to do pole a poté extrahujte první prvek pole.

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

Výsledek:

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

V tomto případě se tedy pole skládá pouze z jednoho prvku – celého řetězcového literálu.


  1. Jak přidat zdroj dat PostgreSQL do WildFly 9.0?

  2. Úloha SSIS pro nekonzistentní import počtu sloupců?

  3. Spusťte Oracle Forms jako samostatný bez prohlížeče

  4. SQLite JSON_QUOTE()