SQLite
 sql >> Baza danych >  >> RDS >> SQLite

SQLite JSON()

W SQLite json() funkcja konwertuje nieprzetworzony tekst, który wygląda jak JSON na rzeczywisty JSON.

Gdy wywołujemy funkcję, przekazujemy ciąg JSON jako argument. json() funkcja następnie sprawdza, czy argument jest prawidłowym ciągiem JSON i zwraca zminimalizowaną wersję tego ciągu JSON. Jeśli argument nie jest poprawnie sformułowanym ciągiem JSON, zgłaszany jest błąd.

Jednak json() funkcja nie została zaprojektowana do testowania, czy wartość jest poprawnym JSON. Aby to zrobić, użyj json_valid() zamiast tego.

Składnia

json(X)

Gdzie X to wartość do sprawdzenia i zminimalizowania.

Przykład

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

Wynik:

{"a":1}

W tym przypadku podałem prawidłowy dokument JSON, więc została zwrócona jego zminimalizowana wersja (niepotrzebne spacje zostały usunięte).

Oto przykład, który używa większego dokumentu JSON z większą ilością spacji:

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

Wynik:

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

json() funkcja może być przydatna, gdy musisz przekazać JSON do innej funkcji. Jak wspomniano, konwertuje surowy tekst, który wygląda jak JSON, na rzeczywisty JSON, co czyni go idealnym rozwiązaniem, gdy musisz przekazać go do innej funkcji. Druga funkcja zinterpretuje następnie wartość jako JSON, a nie ciąg.

Nieprawidłowy JSON

Przekazanie nieprawidłowego ciągu JSON powoduje błąd:

SELECT json('{oops!');

Wynik:

Runtime error: malformed JSON

Zduplikowane etykiety

Jeśli dokument JSON zawiera zduplikowane etykiety, nie ma gwarancji, że zawsze zostaną zachowane.

W momencie pisania zachowywane są zduplikowane etykiety. Jednak dokumentacja SQLite informuje, że może się to zmienić w przyszłej wersji SQLite, tak aby zduplikowane etykiety były dyskretnie usuwane.

Oto przykład, który używa dokumentu JSON ze zduplikowanymi etykietami:

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

Wynik:

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

W tym przypadku mój dokument JSON ma dwie etykiety o nazwie a . Oba zostały zachowane w mojej instalacji SQLite (wersja 3.38.0), ale nie zawsze tak będzie w przyszłych wersjach SQLite.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jeśli moja tabela ma 4 kolumny i chcę pobrać trzecią kolumnę, co mam zrobić.

  2. Jak wyodrębnić dzień, miesiąc i rok z daty w SQLite?

  3. Utwórz nową tabelę w istniejącej bazie danych w oddzielnej klasie SQLiteOpenHelper

  4. sqlite uzyskaj pole z ponad 2 MB

  5. Problem z pamięcią SQLite przy podejściu singleton