No MySQL, o
JSON_KEYS()
A função retorna chaves do valor de nível superior de um objeto JSON. As chaves são retornadas como uma matriz JSON ou, se for um path
for fornecido, as chaves de nível superior do caminho selecionado. Você fornece o documento JSON como um argumento para a função.
Você também pode (opcionalmente) fornecer um segundo argumento para especificar onde o caminho de “nível superior” começa dentro do documento JSON.
Sintaxe
A sintaxe fica assim:
JSON_KEYS(json_doc[, path])
Onde
json_doc
é o documento JSON e o path
é um argumento opcional para determinar onde o caminho de “nível superior” começa no documento JSON. A matriz de resultados está vazia se o objeto selecionado estiver vazio. Se o valor de nível superior tiver subobjetos aninhados, o valor de retorno não incluirá chaves desses subobjetos.
Exemplo 1 – Uso básico
Aqui está um exemplo para demonstrar.
SELECT JSON_KEYS('{"a": 1, "b": 2, "c": 3}') AS 'Result';
Resultado:
+-----------------+ | Result | +-----------------+ | ["a", "b", "c"] | +-----------------+
Aqui está outro exemplo:
SELECT JSON_KEYS('{"Name": "Bart", "Age": 10}') AS 'Result';
Resultado:
+-----------------+ | Result | +-----------------+ | ["Age", "Name"] | +-----------------+
Exemplo 2 – Especificar um caminho
Aqui está um exemplo de especificação de um caminho. Isso nos permite obter as chaves de um objeto aninhado (em vez de ficar limitado apenas ao objeto de nível superior de todo o documento JSON).
SELECT JSON_KEYS('{"a": 1, "b": 2, "c": {"d": 3, "e": 4, "f": 5}}', '$.c') AS 'Result';
Resultado:
+-----------------+ | Result | +-----------------+ | ["d", "e", "f"] | +-----------------+
Exemplo 3 – Caminho inexistente
Se você especificar um caminho que não existe, um valor NULL será retornado.
SELECT JSON_KEYS('{"a": 1, "b": 2, "c": {"d": 3, "e": 4, "f": 5}}', '$.z') AS 'Result';
Resultado:
+--------+ | Result | +--------+ | NULL | +--------+
Você também obterá um valor NULL se algum dos argumentos for
NULL
ou se o primeiro argumento não for um objeto JSON. Exemplo 4 – Matrizes
Arrays não são objetos e não contêm pares de chave/valor. Portanto, você obterá um valor NULL se tentar retornar chaves de uma matriz.
SELECT JSON_KEYS('[1, 2, 3]') AS 'Result';
Resultado:
+--------+ | Result | +--------+ | NULL | +--------+
No entanto, se algum dos elementos do array contiver um objeto, você ainda poderá usar o
path
argumento para obter as chaves desse objeto. SELECT JSON_KEYS('[1, 2, {"a": 1, "b": 2}]', '$[2]') AS 'Result';
Resultado:
+------------+ | Result | +------------+ | ["a", "b"] | +------------+
Exemplo 5 – Objetos vazios
Se o objeto selecionado estiver vazio, você obterá um array vazio.
SELECT JSON_KEYS('{}') AS 'Result';
Resultado:
+--------+ | Result | +--------+ | [] | +--------+