MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

MariaDB JSON_KEYS() explicado


No MariaDB, JSON_KEYS() é uma função interna que retorna uma matriz das chaves de nível superior de um documento JSON. Se um caminho for fornecido, ele retornará as chaves de nível superior desse caminho.

Exclui chaves de subobjetos aninhados no nível especificado.

Além disso, se o objeto selecionado estiver vazio, uma matriz vazia será retornada.

Sintaxe


A sintaxe fica assim:
JSON_KEYS(json_doc[, path])

Onde json_doc é o documento JSON e path é um caminho dentro do documento.

Exemplo


Aqui está um exemplo para demonstrar.
SET @json_document = '
    { 
        "name": "Wag", 
        "type": "Dog", 
        "weight": 20 
    }
';
SELECT JSON_KEYS(@json_document);

Resultado:
+----------------------------+
| JSON_KEYS(@json_document)  |
+----------------------------+
| ["name", "type", "weight"] |
+----------------------------+

Especificando um caminho


Aqui está um exemplo de especificação de um caminho dentro do documento:
SET @json_document = '
    { 
        "_id" : 1, 
        "name" : "Wag", 
        "details" : {
            "type" : "Dog", 
            "weight" : 20,
            "awards" : { 
                "Florida Dog Awards" : "Top Dog", 
                "New York Marathon" : "Fastest Dog", 
                "Sumo 2020" : "Biggest Dog"
            }
        }
    }
';
SELECT JSON_KEYS(
    @json_document, 
    '$.details'
    ) AS Result;

Resultado:
+------------------------------+
| Result                       |
+------------------------------+
| ["type", "weight", "awards"] |
+------------------------------+

Como mencionado, os subobjetos são excluídos do resultado.

Caminhos inexistentes


Passar um caminho que não existe no documento JSON resulta em NULL .

Exemplo:
SET @json_document = '
    { 
        "_id" : 1, 
        "name" : "Wag", 
        "details" : {
            "type" : "Dog", 
            "weight" : 20,
            "awards" : { 
                "Florida Dog Awards" : "Top Dog", 
                "New York Marathon" : "Fastest Dog", 
                "Sumo 2020" : "Biggest Dog"
            }
        }
    }
';
SELECT JSON_KEYS(
    @json_document, 
    '$.wrong'
    ) AS Result;

Resultado:
+--------+
| Result |
+--------+
| NULL   |
+--------+

Objetos Vazios


Se o objeto selecionado estiver vazio, uma matriz vazia será retornada:
SELECT JSON_KEYS('{}');

Resultado:
+-----------------+
| JSON_KEYS('{}') |
+-----------------+
| []              |
+-----------------+

Argumentos nulos


Se algum argumento for NULL , o resultado é NULL :
SELECT 
    JSON_KEYS(null),
    JSON_KEYS(null, '$.type'),
    JSON_KEYS('{"a":1}', null);

Resultado:
+-----------------+---------------------------+----------------------------+
| JSON_KEYS(null) | JSON_KEYS(null, '$.type') | JSON_KEYS('{"a":1}', null) |
+-----------------+---------------------------+----------------------------+
| NULL            | NULL                      | NULL                       |
+-----------------+---------------------------+----------------------------+

Contagem de parâmetros incorreta


Não fornecer argumentos resulta em um erro:
SELECT JSON_KEYS();

Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_KEYS'

É o mesmo quando você fornece poucos ou muitos argumentos:
SELECT JSON_KEYS('{ "a": 1}', 1, 2);

Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_KEYS'