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

Dar formato a los resultados de SQLite como JSON

Es posible mostrar los resultados de la consulta como un documento JSON cuando se utiliza la interfaz de línea de comandos de SQLite.

Podemos hacer esto con json modo de salida.

También podemos usar funciones de SQLite como json_object() y/o json_array() para devolver los resultados de la consulta como un documento JSON.

Modo de salida JSON

Podemos cambiar el modo de salida así:

.mode json

Eso es todo.

Ahora, cuando ejecutamos una consulta, los resultados se muestran como un documento JSON:

SELECT * 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}]

Para que quede claro, aquí está en modo tabla:

.mode table

Ejecute la consulta:

SELECT * FROM Pets;

Resultado:

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

Tenga en cuenta que el modo de salida json se introdujo en SQLite 3.33.0, que se lanzó el 14 de agosto de 2020.

Si está utilizando una versión anterior de SQLite, los ejemplos anteriores no funcionarán para usted. Deberá actualizar a una versión posterior si desea que esto funcione.

Alternativamente, podría usar una función JSON para hacer el trabajo (suponiendo que las funciones JSON estén habilitadas).

Funciones JSON

Otra forma de hacerlo es incorporar una o más funciones JSON a nuestra consulta para que devuelva un documento JSON.

Primero, establezcamos nuestro modo de salida en list :

.mode list

Ahora ejecutemos una consulta que use json_group_array() y json_object() para devolver los resultados de nuestra consulta en un documento JSON:

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}]

Aquí, generamos cada fila como un objeto JSON y todo está envuelto en una matriz JSON.

Podemos omitir json_group_array() función para devolver cada objeto por sí solo:

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}

Estos ejemplos asumen que las funciones JSON están habilitadas. Si está utilizando SQLite 3.38.0 o posterior, estos deben estar habilitados de forma predeterminada (a menos que se hayan deshabilitado explícitamente al compilar SQLite).

Antes de la versión 3.38.0 de SQLite (lanzada el 22 de febrero de 2022), necesitábamos compilar SQLite con SQLITE_ENABLE_JSON1 opción para incluir las funciones JSON en el archivo build. Sin embargo, a partir de la versión 3.38.0 de SQLite, las funciones JSON se incluyen de forma predeterminada.