В SQLite, json_quote()
функцията преобразува число или низ в съответното му JSON представяне.
Ние предоставяме числото или низа като аргумент, когато извикаме функцията и функцията връща JSON представяне на тази стойност.
Синтаксис
Синтаксисът е така:
json_quote(X)
Където X
е число или низ.
Примери
Ето какво се случва, когато предадем низ на функцията:
SELECT json_quote('Super');
Резултат:
"Super"
А ето и число:
SELECT json_quote(10.45);
Резултат:
10.45
Ето низ, който изглежда като масив:
SELECT json_quote('[10.45]');
Резултат:
"[10.45]"
Ето низ, който изглежда като обект:
SELECT json_quote('{ "score" : 10.45 }');
Резултат:
"{ \"score\" : 10.45 }"
Но ако предадем аргумента в json()
функция, получаваме това:
SELECT json_quote(json('{ "score" : 10.45 }'));
Резултат:
{"score":10.45}
Нулеви стойности
Предаването на null
връща null
:
SELECT json_quote( null );
Резултат:
null
Това всъщност е текстовата стойност на SQL null
. Можем да проверим това, като го предадем на json_type()
функция:
SELECT json_type(json_quote( null ));
Резултат:
null
json_type()
функцията връща типа текстова стойност на SQL на своя аргумент. В този случай той върна null
, което показва, че json_quote()
функцията върна null
когато предадохме null
към него.
В случай, че подозираме, че нашият SQLite CLI връща null
поради връщане на действителна нулева стойност, можем да направим следното, за да изключим това:
.nullvalue N/A
Това казва на нашия интерфейс на командния ред да върне N/A
всеки път, когато се върне нулева стойност.
След като изпълним горната команда, нека изпълним отново предишните изрази, както и операция, която всъщност води до нулева стойност:
SELECT
json_quote( null ) AS json_quote,
json_type(json_quote( null )) AS json_type,
1 / 0 AS actual_null;
Резултат:
+------------+-----------+-------------+ | json_quote | json_type | actual_null | +------------+-----------+-------------+ | null | null | N/A | +------------+-----------+-------------+
В SQLite, разделянето на число на нула води до нулева стойност (много други СУБД издават грешка в такива случаи). В този пример бях задал нулеви стойности, за да върна N/A
, и така можем да видим, че има разлика между изхода на двете функции и действителната нулева стойност. Тоест единствената нулева стойност в горния изход е в последната колона.
След като казахме всичко това, нулева стойност все още може да доведе до текстовата стойност на SQL null
се връща при извикване на json_quote()
. Може би един пример илюстрира това по-добре, отколкото мога да го обясня:
SELECT
json_quote( 1 / 0 ),
json_type(json_quote( 1 / 0 )),
json_type( 1 / 0 ),
1 / 0;
Резултат:
+---------------------+--------------------------------+--------------------+-------+ | json_quote( 1 / 0 ) | json_type(json_quote( 1 / 0 )) | json_type( 1 / 0 ) | 1 / 0 | +---------------------+--------------------------------+--------------------+-------+ | null | null | N/A | N/A | +---------------------+--------------------------------+--------------------+-------+
Можем да видим, че първите две колони връщат null
SQL текстова стойност, а другите две колони връщат действителна нулева стойност.
Предаване на булеви стойности
Ето пример за предаване на булеви стойности като true
и false
:
SELECT
json_quote( true ) AS true,
json_quote( false ) AS false;
Резултат:
+------+-------+ | true | false | +------+-------+ | 1 | 0 | +------+-------+
Невалиден брой аргументи
Извикването на функцията без предаване на аргумент води до грешка:
SELECT json_quote();
Резултат:
Parse error: wrong number of arguments to function json_quote() SELECT json_quote(); ^--- error here
И предаването на твърде много аргументи също води до грешка:
SELECT json_quote( 1, 2 );
Резултат:
Parse error: wrong number of arguments to function json_quote() SELECT json_quote( 1, 2 ); ^--- error here