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.