In SQLite, il json_array_length()
La funzione restituisce il numero di elementi in un dato array JSON.
L'array viene fornito come argomento. Se l'array è incorporato in un documento JSON più grande, possiamo utilizzare un secondo argomento facoltativo per specificare il percorso dell'array.
Se il valore non è un array, la funzione restituisce 0
.
Sintassi
La funzione può essere utilizzata nei seguenti due modi:
json_array_length(X)
json_array_length(X,P)
Dove X
rappresenta l'array e P
è un percorso facoltativo che può essere utilizzato per specificare il percorso dell'array all'interno di un documento più grande.
Esempio
Ecco un esempio di base da dimostrare:
SELECT json_array_length('[ 7, 12, 10 ]');
Risultato:
3
L'array contiene tre elementi e quindi 3
viene restituito.
Specifica un percorso
Possiamo anche usare un secondo argomento per specificare il percorso dell'array:
SELECT json_array_length('[ 7, 12, 10 ]', '$');
Risultato:
3
In questo caso l'array è al livello più alto, quindi passiamo $
come percorso.
L'esempio seguente utilizza una matrice incorporata in un documento più grande:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs'
);
Risultato:
3
In questo caso, l'array in dogs
contiene tre elementi.
Possiamo passare al livello successivo e trovare il numero di elementi in uno degli altri array:
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'
);
Risultato:
4
Gli array sono a base zero, quindi il conteggio inizia da 0
. Pertanto, abbiamo specificato [1]
per ottenere il secondo elemento all'interno di dogs
array, che risulta essere un oggetto JSON. Usiamo quindi .scores
per selezionare la sua matrice.
Selezione di non array
Se il percorso punta a un valore diverso da un array JSON, 0
viene restituito:
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'
);
Risultato:
0
Selezione di un percorso inesistente
Se il secondo argomento punta a un percorso che non esiste, null
viene restituito.
Per prima cosa, impostiamo .nullvalue
a NULL
:
.nullvalue NULL
Il .nullvalue
Il comando dot ci consente di fornire una stringa che verrà utilizzata per sostituire i valori null. È uno dei diversi modi in cui puoi sostituire i valori null con una stringa in SQLite. In questo caso, l'ho impostato su NULL
. Ora, qualsiasi valore nullo restituirà NULL
invece di un risultato vuoto.
Ora chiamiamo json_array_length()
, ma usa un secondo argomento che punta a un percorso inesistente:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.cats'
);
Risultato:
NULL
Percorsi non validi
Riceveremo un errore se il nostro percorso non è ben formato:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'dogs'
);
Risultato:
Runtime error: JSON path error near 'dogs'
In questo caso, ho dimenticato di includere $.
all'inizio del sentiero.
Documenti JSON non validi
Riceveremo anche un errore che JSON non è ben formato:
SELECT json_array_length('{ "Dogs" : }',
'$'
);
Risultato:
Runtime error: malformed JSON
Questa volta l'errore ci dice che il nostro JSON non è corretto.