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

MariaDB JSON_ARRAY_APPEND() explicado


No MariaDB, JSON_ARRAY_APPEND() é uma função interna que anexa valores ao final do array/s especificado em um documento JSON e retorna o resultado.

Sintaxe


A sintaxe fica assim:
JSON_ARRAY_APPEND(json_doc, path, value[, path, value] ...)

Onde json_doc é o documento JSON, path é o caminho para onde você deseja anexar o(s) valor(es) e value é o valor a ser acrescentado.

Exemplo


Aqui está um exemplo para demonstrar a função.
SET @json_doc = '[0, 1, 2, 3]';

SELECT JSON_ARRAY_APPEND(@json_doc, '$', 4);

Resultado:
+--------------------------------------+
| JSON_ARRAY_APPEND(@json_doc, '$', 4) |
+--------------------------------------+
| [0, 1, 2, 3, 4]                      |
+--------------------------------------+

Neste caso, o valor 4 foi anexado ao final da matriz.

Anexar vários valores


Você pode anexar vários valores em uma única chamada para JSON_ARRAY_APPEND() .

Exemplo:
SET @json_doc = '[0, 1, 2, 3]';

SELECT JSON_ARRAY_APPEND(@json_doc, '$', 4, '$', 5);

Resultado:
+----------------------------------------------+
| JSON_ARRAY_APPEND(@json_doc, '$', 4, '$', 5) |
+----------------------------------------------+
| [0, 1, 2, 3, 4, 5]                           |
+----------------------------------------------+

Várias matrizes


Você pode anexar valores a mais de uma matriz na mesma chamada para JSON_ARRAY_APPEND() .

Exemplo:
SET @json_doc = '{"a": [0, 1], "b": [2, 3]}';

SELECT JSON_ARRAY_APPEND(@json_doc, '$.a', 4, '$.b', 5);

Resultado:
+--------------------------------------------------+
| JSON_ARRAY_APPEND(@json_doc, '$.a', 4, '$.b', 5) |
+--------------------------------------------------+
| {"a": [0, 1, 4], "b": [2, 3, 5]}                 |
+--------------------------------------------------+

Matrizes aninhadas


Aqui está um exemplo de como anexar um valor a uma matriz aninhada:
SET @json_doc = '[0, 1, [2, 3]]';

SELECT JSON_ARRAY_APPEND(@json_doc, '$[2]', 4);

Resultado:
+-----------------------------------------+
| JSON_ARRAY_APPEND(@json_doc, '$[2]', 4) |
+-----------------------------------------+
| [0, 1, [2, 3, 4]]                       |
+-----------------------------------------+

E no exemplo a seguir, o documento JSON original não contém uma matriz aninhada, mas JSON_ARRAY_APPEND() cria uma matriz aninhada com base em nosso caminho:
SET @json_doc = '[0, 1, 2, 3]';

SELECT JSON_ARRAY_APPEND(@json_doc, '$[3]', 4);

Resultado:
+-----------------------------------------+
| JSON_ARRAY_APPEND(@json_doc, '$[3]', 4) |
+-----------------------------------------+
| [0, 1, 2, [3, 4]]                       |
+-----------------------------------------+

Documento JSON maior


Aqui está um exemplo com um documento JSON um pouco maior.

Eu também uso JSON_DETAILED() para embelezar o resultado:
SET @json_doc = '{  
    "pet": {    
       "name": "Fluffy", 
       "diet": ["Fish", "Chicken"]  
    }
 }';
SELECT JSON_DETAILED(
        JSON_ARRAY_APPEND(
            @json_doc, 
            '$.pet.diet', 
            'Water')
);

Resultado:
{
    "pet": 
    {
        "name": "Fluffy",
        "diet": 
        [
            "Fish",
            "Chicken",
            "Water"
        ]
    }
}

E aqui está um que cria uma matriz aninhada:
SET @json_doc = '{  
    "pet": {    
       "name": "Scratch", 
       "diet": ["Beef", "Water"]
    }
 }';
SELECT JSON_DETAILED(
        JSON_ARRAY_APPEND(
            @json_doc, 
            '$.pet.diet[1]', 
            'Beer')
);

Resultado:
{
    "pet": 
    {
        "name": "Scratch",
        "diet": 
        [
            "Beef",
            
            [
                "Water",
                "Beer"
            ]
        ]
    }
}

Argumentos nulos


Se o primeiro argumento for NULL , o resultado é NULL :
SELECT JSON_ARRAY_APPEND(null, '$', 4);

Resultado:
+---------------------------------+
| JSON_ARRAY_APPEND(null, '$', 4) |
+---------------------------------+
| NULL                            |
+---------------------------------+

O mesmo se aplica ao path argumento:
SET @json_doc = '[0, 1, 2, 3]';

SELECT JSON_ARRAY_APPEND(@json_doc, null, 4);

Resultado:
+---------------------------------------+
| JSON_ARRAY_APPEND(@json_doc, null, 4) |
+---------------------------------------+
| NULL                                  |
+---------------------------------------+

No entanto, se o value argumento é NULL , então NULL é anexado ao array:
SET @json_doc = '[0, 1, 2, 3]';

SELECT JSON_ARRAY_APPEND(@json_doc, '$', null);

Resultado:
+-----------------------------------------+
| JSON_ARRAY_APPEND(@json_doc, '$', null) |
+-----------------------------------------+
| [0, 1, 2, 3, null]                      |
+-----------------------------------------+

Você também pode usar JSON_ARRAY_INSERT() para inserir valores em uma matriz.