sql >> Databáze >  >> RDS >> SQLite

SQLite JSON()

V SQLite, json() funkce převede nezpracovaný text, který vypadá jako JSON, na skutečný JSON.

Při volání funkce předáváme řetězec JSON jako argument. json() funkce poté zkontroluje, zda je argument platným řetězcem JSON, a vrátí zmenšenou verzi tohoto řetězce JSON. Pokud argument není správně vytvořený řetězec JSON, dojde k chybě.

Nicméně json() funkce nebyla navržena tak, aby testovala, zda je hodnota platná JSON. Chcete-li to provést, použijte json_valid() místo toho.

Syntaxe

json(X)

Kde X je hodnota, která má být zkontrolována a minifikována.

Příklad

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

Výsledek:

{"a":1}

V tomto případě jsem poskytl platný dokument JSON, a tak byla vrácena jeho zmenšená verze (byly odstraněny zbytečné mezery).

Zde je příklad, který používá větší dokument JSON s více mezerami:

SELECT json('{
	"_id": 1.0,
	"title": "Animals",
	"body": "blah blah 1",
	"tags": [
		"cats",
		"dogs"
	]
}');

Výsledek:

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

json() funkce může být užitečná, když potřebujete předat JSON jiné funkci. Jak již bylo zmíněno, převádí nezpracovaný text, který vypadá jako JSON, na skutečný JSON, díky čemuž je ideální, když jej potřebujete předat jiné funkci. Druhá funkce pak bude interpretovat hodnotu jako JSON, nikoli jako řetězec.

Neplatný JSON

Předání neplatného řetězce JSON způsobí chybu:

SELECT json('{oops!');

Výsledek:

Runtime error: malformed JSON

Duplicitní štítky

Pokud dokument JSON obsahuje duplicitní štítky, nelze zaručit, že budou vždy zachovány.

V době psaní tohoto článku jsou zachovány duplicitní štítky. Dokumentace SQLite však radí, že by se to mohlo v budoucí verzi SQLite změnit, takže duplicitní štítky budou tiše odstraněny.

Zde je příklad, který používá dokument JSON s duplicitními štítky:

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

Výsledek:

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

V tomto případě má můj dokument JSON dva štítky s názvem a . Obojí bylo zachováno v mé instalaci SQLite (verze 3.38.0), ale v budoucích verzích SQLite tomu tak vždy nemusí být.


  1. Oracle vloží z výběru do tabulky s více sloupci

  2. Vícedílný identifikátor nelze svázat

  3. Pořiďte si svůj vlastní cloud dostupný pro DigitalOcean

  4. Pracovníci Rails Resque selžou s PGError:server neočekávaně ukončil připojení