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

SQLite JSON_ARRAY_LENGTH()

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.