En SQLite, json_quote()
La función convierte un número o cadena en su representación JSON correspondiente.
Proporcionamos el número o la cadena como argumento cuando llamamos a la función, y la función devuelve una representación JSON de ese valor.
Sintaxis
La sintaxis es así:
json_quote(X)
Donde X
es un número o cadena.
Ejemplos
Esto es lo que sucede cuando pasamos una cadena a la función:
SELECT json_quote('Super');
Resultado:
"Super"
Y aquí hay un número:
SELECT json_quote(10.45);
Resultado:
10.45
Aquí hay una cadena que parece una matriz:
SELECT json_quote('[10.45]');
Resultado:
"[10.45]"
Aquí hay una cadena que parece un objeto:
SELECT json_quote('{ "score" : 10.45 }');
Resultado:
"{ \"score\" : 10.45 }"
Pero si pasamos el argumento en json()
función, obtenemos esto:
SELECT json_quote(json('{ "score" : 10.45 }'));
Resultado:
{"score":10.45}
Valores nulos
Pasando null
devuelve null
:
SELECT json_quote( null );
Resultado:
null
Este es en realidad el valor de texto SQL null
. Podemos verificar esto pasándolo a json_type()
función:
SELECT json_type(json_quote( null ));
Resultado:
null
El json_type()
La función devuelve el tipo de valor de texto SQL de su argumento. En este caso devolvió null
, lo que indica que json_quote()
la función devolvió null
cuando pasamos null
a ella.
En caso de que sospechemos que nuestra CLI de SQLite está devolviendo null
debido a que se devuelve un valor nulo real, podemos hacer lo siguiente para descartarlo:
.nullvalue N/A
Eso le dice a nuestra interfaz de línea de comandos que devuelva N/A
cada vez que se devuelve un valor nulo.
Después de ejecutar el comando anterior, ejecutemos las declaraciones anteriores nuevamente, así como una operación que en realidad da como resultado un valor nulo:
SELECT
json_quote( null ) AS json_quote,
json_type(json_quote( null )) AS json_type,
1 / 0 AS actual_null;
Resultado:
+------------+-----------+-------------+ | json_quote | json_type | actual_null | +------------+-----------+-------------+ | null | null | N/A | +------------+-----------+-------------+
En SQLite, dividir un número por cero da como resultado un valor nulo (muchos otros DBMS arrojan un error en tales casos). En este ejemplo, había establecido valores nulos para devolver N/A
, por lo que podemos ver que hay una diferencia entre la salida de las dos funciones y el valor nulo real. Es decir, el único valor nulo en la salida anterior está en la última columna.
Habiendo dicho todo eso, un valor nulo aún puede resultar en el valor de texto SQL null
devuelto al llamar a json_quote()
. Quizás un ejemplo ilustre esto mejor de lo que yo puedo explicarlo:
SELECT
json_quote( 1 / 0 ),
json_type(json_quote( 1 / 0 )),
json_type( 1 / 0 ),
1 / 0;
Resultado:
+---------------------+--------------------------------+--------------------+-------+ | json_quote( 1 / 0 ) | json_type(json_quote( 1 / 0 )) | json_type( 1 / 0 ) | 1 / 0 | +---------------------+--------------------------------+--------------------+-------+ | null | null | N/A | N/A | +---------------------+--------------------------------+--------------------+-------+
Podemos ver que las dos primeras columnas devuelven el null
valor de texto SQL, y las otras dos columnas devuelven un valor nulo real.
Pasar booleanos
Aquí hay un ejemplo de cómo pasar valores booleanos como true
y false
:
SELECT
json_quote( true ) AS true,
json_quote( false ) AS false;
Resultado:
+------+-------+ | true | false | +------+-------+ | 1 | 0 | +------+-------+
Recuento de argumentos no válidos
Llamar a la función sin pasar un argumento da como resultado un error:
SELECT json_quote();
Resultado:
Parse error: wrong number of arguments to function json_quote() SELECT json_quote(); ^--- error here
Y pasar demasiados argumentos también da como resultado un error:
SELECT json_quote( 1, 2 );
Resultado:
Parse error: wrong number of arguments to function json_quote() SELECT json_quote( 1, 2 ); ^--- error here