sql >> Database teknologi >  >> RDS >> SQLite

SQLite JSON_ARRAY_LENGTH()

I SQLite er json_array_length() funktion returnerer antallet af elementer i et givet JSON-array.

Arrayet er angivet som et argument. Hvis arrayet er indlejret i et større JSON-dokument, kan vi bruge et valgfrit andet argument til at angive stien til arrayet.

Hvis værdien ikke er et array, returnerer funktionen 0 .

Syntaks

Funktionen kan bruges på følgende to måder:

json_array_length(X)
json_array_length(X,P)

Hvor X repræsenterer arrayet og P er en valgfri sti, der kan bruges til at angive stien til arrayet i et større dokument.

Eksempel

Her er et grundlæggende eksempel for at demonstrere:

SELECT json_array_length('[ 7, 12, 10 ]');

Resultat:

3

Arrayet indeholder tre elementer og så 3 er returneret.

Angiv en sti

Vi kan også bruge et andet argument for at angive stien til arrayet:

SELECT json_array_length('[ 7, 12, 10 ]', '$');

Resultat:

3

I dette tilfælde er arrayet på det øverste niveau, så vi sender $ som stien.

Følgende eksempel bruger en matrix, der er indlejret i et større dokument:

SELECT json_array_length('{
    "dogs" : [
            { "name" : "Wag", "scores" : [ 7, 9 ] },
            { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
            { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
    ]
}', 
'$.dogs'
);

Resultat:

3

I dette tilfælde er arrayet ved dogs indeholder tre elementer.

Vi kan navigere ned til næste niveau og finde antallet af elementer i et af de andre arrays:

SELECT json_array_length('{
    "dogs" : [
            { "name" : "Wag", "scores" : [ 7, 9 ] },
            { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
            { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
    ]
}', 
'$.dogs[1].scores'
);

Resultat:

4

Arrays er nul-baserede, og derfor starter optællingen ved 0 . Derfor specificerede vi [1] for at få det andet element i dogs array, som tilfældigvis er et JSON-objekt. Vi bruger derefter .scores for at vælge dens array.

Valg af ikke-arrays

Hvis stien peger på en anden værdi end et JSON-array, 0 returneres:

SELECT json_array_length('{
    "dogs" : [
            { "name" : "Wag", "scores" : [ 7, 9 ] },
            { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
            { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
    ]
}', 
'$.dogs[1].name'
);

Resultat:

0

Valg af en ikke-eksisterende sti

Hvis det andet argument peger på en sti, der ikke eksisterer, null er returneret.

Lad os først indstille .nullvalue til NULL :

.nullvalue NULL

.nullvalue dot-kommandoen giver os mulighed for at angive en streng, der vil blive brugt til at erstatte null-værdier. Det er en af ​​flere måder, du kan erstatte null-værdier med en streng i SQLite. I dette tilfælde indstiller jeg den til NULL . Nu vil alle null-værdier returnere NULL i stedet for et tomt resultat.

Lad os nu kalde json_array_length() , men brug et andet argument, der peger på en ikke-eksisterende sti:

SELECT json_array_length('{
    "dogs" : [
            { "name" : "Wag", "scores" : [ 7, 9 ] },
            { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
            { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
    ]
}', 
'$.cats'
);

Resultat:

NULL

Ugyldige stier

Vi får en fejl, hvis vores vej ikke er veludformet:

SELECT json_array_length('{
    "dogs" : [
            { "name" : "Wag", "scores" : [ 7, 9 ] },
            { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
            { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
    ]
}', 
'dogs'
);

Resultat:

Runtime error: JSON path error near 'dogs'

I dette tilfælde glemte jeg at inkludere $. forrest på stien.

Ugyldige JSON-dokumenter

Vi får også en fejl, JSON er ikke veludformet:

SELECT json_array_length('{ "Dogs" : }', 
'$'
);

Resultat:

Runtime error: malformed JSON

Denne gang fortæller fejlen os, at vores JSON er forkert udformet.


  1. Sådan fungerer LOCATE()-funktionen i MySQL

  2. Forskellen mellem venstre join og højre join i SQL Server

  3. Hvor gemmer PostgreSQL konfigurations-/conf-filer?

  4. Generering af en række tal i MySQL