SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Formatar resultados do SQLite como JSON


É possível gerar resultados de consulta como um documento JSON ao usar a interface de linha de comando SQLite.

Podemos fazer isso com o json modo de saída.

Também podemos usar funções SQLite como json_object() e/ou json_array() para retornar os resultados da consulta como um documento JSON.

Modo de saída JSON


Podemos alterar o modo de saída assim:
.mode json

Isso é tudo.

Agora, quando executamos uma consulta, os resultados são exibidos como um 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}]

Só para ficar claro, aqui está no modo de tabela:
.mode table

Execute a consulta:
SELECT * FROM Pets;

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

Observe que o modo de saída json foi introduzido no SQLite 3.33.0, lançado em 14 de agosto de 2020.

Se você estiver usando uma versão anterior do SQLite, os exemplos acima não funcionarão para você. Você precisará atualizar para uma versão posterior se quiser que isso funcione.

Como alternativa, você pode usar uma função JSON para fazer o trabalho (supondo que as funções JSON estejam habilitadas).

Funções JSON


Outra maneira de fazer isso é incorporar uma ou mais funções JSON em nossa consulta para que ela retorne um documento JSON.

Primeiro, vamos definir nosso modo de saída para list :
.mode list

Agora vamos executar uma consulta que usa json_group_array() e json_object() para retornar nossos resultados de consulta em um 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}]

Aqui, produzimos cada linha como um objeto JSON e tudo é encapsulado em uma matriz JSON.

Podemos omitir o json_group_array() função para retornar cada objeto por conta própria:
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}

Esses exemplos pressupõem que as funções JSON estão habilitadas. Se você estiver usando o SQLite 3.38.0 ou posterior, eles devem estar habilitados por padrão (a menos que tenham sido explicitamente desabilitados ao compilar o SQLite).

Antes do SQLite versão 3.38.0 (lançado em 22 de fevereiro de 2022), precisávamos compilar o SQLite com o SQLITE_ENABLE_JSON1 opção para incluir as funções JSON no arquivo build. No entanto, a partir do SQLite versão 3.38.0, as funções JSON são incluídas por padrão.