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

SQLite JSON()


No SQLite, o json() A função converte texto bruto que se parece com JSON em JSON real.

Passamos uma string JSON como argumento quando chamamos a função. O json() A função então verifica se o argumento é uma string JSON válida e retorna uma versão reduzida dessa string JSON. Se o argumento não for uma string JSON bem formada, um erro será gerado.

No entanto, o json() A função não foi projetada para testar se um valor é JSON válido ou não. Para fazer isso, use o json_valid() função em vez disso.

Sintaxe

json(X)

Onde X é o valor a ser verificado e minimizado.

Exemplo

SELECT json('{ "a": 1 }');

Resultado:
{"a":1}

Nesse caso, forneci um documento JSON válido e, portanto, uma versão reduzida dele foi retornada (os espaços desnecessários foram removidos).

Aqui está um exemplo que usa um documento JSON maior com mais espaços:
SELECT json('{
	"_id": 1.0,
	"title": "Animals",
	"body": "blah blah 1",
	"tags": [
		"cats",
		"dogs"
	]
}');

Resultado:
{"_id":1.0,"title":"Animals","body":"blah blah 1","tags":["cats","dogs"]}

O json() pode ser útil quando você precisa passar JSON para outra função. Como mencionado, ele converte texto bruto que se parece com JSON em JSON real, o que o torna ideal para quando você precisa passá-lo para a outra função. A outra função interpretará o valor como JSON em vez de uma string.

JSON inválido


Passar uma string JSON inválida resulta em um erro:
SELECT json('{oops!');

Resultado:
Runtime error: malformed JSON

Rótulos duplicados


Se um documento JSON contiver rótulos duplicados, não há garantia de que eles sempre serão preservados.

No momento da escrita, os rótulos duplicados são preservados. No entanto, a documentação do SQLite informa que isso pode mudar em uma versão futura do SQLite, para que os rótulos duplicados sejam removidos silenciosamente.

Aqui está um exemplo que usa um documento JSON com rótulos duplicados:
SELECT json('{ "a": 1, "b": 1, "a" : 2 }');

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

Nesse caso, meu documento JSON tem dois rótulos chamados a . Ambos foram preservados na minha instalação do SQLite (versão 3.38.0), mas isso nem sempre pode ser o caso em versões futuras do SQLite.