sql >> Base de Datos >  >> RDS >> SQLite

SQLiteJSON_OBJECT()

El json_object() de SQLite La función devuelve un objeto JSON bien formado en función de sus argumentos.

La función acepta cero o más pares de argumentos y devuelve un objeto JSON bien formado basado en esos argumentos.

Sintaxis

json_object(label1,value1,...)

Donde label1, value2, ... representa los pares etiqueta/valor.

Ejemplo

Aquí hay un ejemplo simple para demostrarlo:

SELECT json_object( "name", "Igor", "age", 35 );

Resultado:

{"name":"Igor","age":35}

Pasar objetos JSON

Pasar un argumento con TEXTO de tipo SQL da como resultado una cadena JSON entrecomillada, con cualquier etiqueta entrecomillada escapada:

SELECT json_object( "user", '{ "name" : "igor", "age" : 35 }' );

Resultado:

{"user":"{ \"name\" : \"igor\", \"age\" : 35 }"}

Si no queremos que esto suceda, podemos usar json() función para proporcionar el valor como un documento JSON válido:

SELECT json_object( "user", json('{ "name" : "igor", "age" : 35 }') );

Resultado:

{"user":{"name":"igor","age":35}}

Otra forma de hacerlo es usar -> de SQLite operador:

SELECT json_object( "user", '{ "name" : "igor", "age" : 35 }' -> '$' );

Resultado:

{"user":{"name":"igor","age":35}}

Alternativamente, podemos usar otro json_object() función:

SELECT json_object( "user", json_object( "name", "Igor", "age", 35 ) );

Resultado:

{"user":{"name":"Igor","age":35}}

Aquí está con algunos otros valores:

SELECT json_object( 
    "a", 1, 
    "user", json_object( "name", "Igor", "age", 35 ), 
    "b", 2 
    );

Resultado:

{"a":1,"user":{"name":"Igor","age":35},"b":2}

Pasar matrices JSON

Es algo similar al pasar matrices JSON:

SELECT json_object( "scores", '[ 9, 4, 7 ]' );

Resultado:

{"scores":"[ 9, 4, 7 ]"}

En este caso, el valor es una cadena que se asemeja a una matriz.

Para devolver una matriz JSON real, podemos pasar nuestro argumento a json() función:

SELECT json_object( "scores", json('[ 9, 4, 7 ]') );

Resultado:

{"scores":[9,4,7]}

También podemos usar el -> operador:

SELECT json_object( "scores", '[ 9, 4, 7 ]' -> '$' );

Resultado:

{"scores":[9,4,7]}

Alternativamente, podemos pasar los valores a json_array() función:

SELECT json_object( "scores", json_array( 9, 4, 7 ) );

Resultado:

{"scores":[9,4,7]}

Aquí está con algunos otros pares de nombre/valor:

SELECT json_object( 
    "name", "Bruno", 
    "scores", json_array( 9, 4, 7 ), 
    "age", 25 
    );

Resultado:

{"name":"Bruno","scores":[9,4,7],"age":25}

Crear un objeto vacío

Llamando a json_object() sin pasar ningún argumento da como resultado un objeto vacío:

SELECT json_object();

Resultado:

{}

Etiquetas duplicadas

Al momento de escribir, json_object() acepta etiquetas duplicadas sin problemas. Por lo tanto, podemos hacer cosas como esta:

SELECT json_object( "b", 1, "b", 2 );

Resultado:

{"b":1,"b":2}

Pero la documentación de SQLite advierte que es posible que este no sea siempre el caso:es posible que las versiones futuras de SQLite no admitan tales escenarios.

Ejemplo de base de datos

Podemos usar json_object() al recuperar datos de una base de datos.

Supongamos que ejecutamos la siguiente consulta:

SELECT * FROM Pets;

Resultado:

+-------+---------+--------+
| PetId | PetName | TypeId |
+-------+---------+--------+
| 1     | Homer   | 3      |
| 2     | Yelp    | 1      |
| 3     | Fluff   | 2      |
| 4     | Brush   | 4      |
+-------+---------+--------+

Podemos ver que hay tres columnas y podemos ver sus nombres.

Podemos usar el json_object() función en esa tabla de esta manera:

SELECT json_object( 
    'PetId', PetId, 
    'PetName', PetName,
    'TypeId', TypeId 
    )
FROM Pets;

Resultado:

{"PetId":1,"PetName":"Homer","TypeId":3}
{"PetId":2,"PetName":"Yelp","TypeId":1}
{"PetId":3,"PetName":"Fluff","TypeId":2}
{"PetId":4,"PetName":"Brush","TypeId":4}

Aquí, especifiqué explícitamente los nombres de las etiquetas, luego usé las columnas reales de la base de datos para los valores. Cada fila se convierte en un documento JSON y cada columna se convierte en un par clave/valor en ese documento JSON.

También podemos usar json_group_array() función para encerrar los documentos en una matriz:

SELECT json_group_array( 
        json_object(
        'PetId', PetId, 
        'PetName', PetName,
        'TypeId', TypeId 
        )
    )
FROM Pets;

Resultado:

[{"PetId":1,"PetName":"Homer","TypeId":3},{"PetId":2,"PetName":"Yelp","TypeId":1},{"PetId":3,"PetName":"Fluff","TypeId":2},{"PetId":4,"PetName":"Brush","TypeId":4}]