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

SQLite JSON_ARRAY_LENGTH()

V SQLite, json_array_length() funkce vrací počet prvků v daném poli JSON.

Pole je poskytováno jako argument. Pokud je pole vloženo do většího dokumentu JSON, můžeme použít volitelný druhý argument k určení cesty k poli.

Pokud hodnota není pole, funkce vrátí 0 .

Syntaxe

Funkci lze použít dvěma následujícími způsoby:

json_array_length(X)
json_array_length(X,P)

Kde X představuje pole a P je volitelná cesta, kterou lze použít k určení cesty k poli v rámci většího dokumentu.

Příklad

Zde je základní příklad k demonstraci:

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

Výsledek:

3

Pole obsahuje tři prvky, tedy 3 je vráceno.

Zadejte cestu

Můžeme také použít druhý argument, abychom specifikovali cestu k poli:

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

Výsledek:

3

V tomto případě je pole na nejvyšší úrovni, a tak předáme $ jako cestu.

Následující příklad používá pole, které je vloženo do většího dokumentu:

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

Výsledek:

3

V tomto případě pole na dogs obsahuje tři prvky.

Můžeme přejít na další úroveň a najít počet prvků v jednom z dalších polí:

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'
);

Výsledek:

4

Pole jsou založeny na nule, takže počet začíná na 0 . Proto jsme zadali [1] získat druhý prvek v rámci dogs pole, což je shodou okolností objekt JSON. Potom použijeme .scores vyberte jeho pole.

Výběr Non-Arrays

Pokud cesta ukazuje na jinou hodnotu než pole JSON, 0 je vráceno:

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'
);

Výsledek:

0

Výběr neexistující cesty

Pokud druhý argument ukazuje na cestu, která neexistuje, null je vráceno.

Nejprve nastavíme .nullvalue na NULL :

.nullvalue NULL

.nullvalue Příkaz dot nám umožňuje zadat řetězec, který bude použit k nahrazení hodnot null. Je to jeden z několika způsobů, jak můžete nahradit hodnoty null řetězcem v SQLite. V tomto případě jsem jej nastavil na NULL . Nyní všechny hodnoty null vrátí NULL místo prázdného výsledku.

Nyní zavoláme json_array_length() , ale použijte druhý argument, který ukazuje na neexistující cestu:

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

Výsledek:

NULL

Neplatné cesty

Pokud naše cesta není správně vytvořena, zobrazí se chyba:

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

Výsledek:

Runtime error: JSON path error near 'dogs'

V tomto případě jsem zapomněl uvést $. v přední části cesty.

Neplatné dokumenty JSON

Také se zobrazí chyba, že JSON není správně vytvořen:

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

Výsledek:

Runtime error: malformed JSON

Tentokrát nám chyba říká, že náš JSON je chybný.


  1. Neznámý sloupec v chybě 'seznam polí' v dotazu aktualizace MySQL

  2. org.postgresql.util.PSQLException:Velké objekty nelze použít v režimu automatického potvrzení

  3. Jak automaticky zavřít nečinná připojení v PostgreSQL?

  4. Jak vytvořit databázi v MySQL