No MySQL, o
JSON_EXTRACT()
A função retorna dados de um documento JSON. Os dados reais retornados são determinados pelo caminho que você fornece como argumento. Você fornece o documento JSON como o primeiro argumento, seguido pelo caminho dos dados a serem retornados. Você também pode fornecer vários caminhos para retornar dados de vários locais no documento.
Sintaxe
A sintaxe fica assim:
JSON_EXTRACT(json_doc, path[, path] ...)
Onde
json_doc
é o documento JSON e o path
é o caminho para o valor a ser retornado. Se for possível que esses argumentos retornem vários valores, os valores correspondentes são encapsulados automaticamente como uma matriz, na ordem correspondente aos caminhos que os produziram.
Exemplo 1 – Uso básico
Aqui está um exemplo para demonstrar.
SELECT JSON_EXTRACT('{"a": 1, "b": 2, "c": 3}', '$.b') AS 'Result';
Resultado:
+--------+ | Result | +--------+ | 2 | +--------+
Neste caso, retornamos o valor da chave
b
. Aqui está outro exemplo:
SELECT JSON_EXTRACT('{"Name": "Bart", "Age": 10}', '$.Name') AS 'Result';
Resultado:
+--------+ | Result | +--------+ | "Bart" | +--------+
Exemplo 2 – Caminho inexistente
Se você especificar um caminho que não existe, um valor NULL será retornado.
SELECT JSON_EXTRACT('{"Name": "Homer", "Age": 39}', '$.Gender') AS 'Result';
Resultado:
+--------+ | Result | +--------+ | NULL | +--------+
Você também obterá um valor NULL se algum dos argumentos for
NULL
. Exemplo 3 – Matrizes
Aqui está um exemplo usando uma matriz.
SELECT JSON_EXTRACT('[1, 2, 3]', '$[2]') AS 'Result';
Resultado:
+--------+ | Result | +--------+ | 3 | +--------+
As matrizes usam numeração baseada em zero, portanto, nesse caso, o terceiro elemento é substituído.
Aqui está outro exemplo de matriz. Desta vez, retornamos um valor de um array aninhado.
SELECT JSON_EXTRACT('[1, 2, [3, 4, 5]]', '$[2][1]') AS 'Result';
Resultado:
+--------+ | Result | +--------+ | 4 | +--------+
Exemplo 4 – Vários caminhos
Você pode especificar mais de um caminho para retornar dados de vários locais no documento JSON.
Exemplo básico:
SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1]', '$[3]') AS 'Result';
Resultado:
+--------+ | Result | +--------+ | [2, 4] | +--------+
Exemplo 5 – Um documento JSON maior
Aqui está um exemplo com um documento JSON um pouco maior.
SET @data = '{ "Person": { "Name": "Homer", "Age": 39, "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_EXTRACT(@data, '$.Person.Name', '$.Person.Age', '$.Person.Hobbies') AS 'Result';
Resultado:
+---------------------------------------+ | Result | +---------------------------------------+ | ["Homer", 39, ["Eating", "Sleeping"]] | +---------------------------------------+
Também podemos escolher um elemento específico do array, se necessário:
SET @data = '{ "Person": { "Name": "Homer", "Age": 39, "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_EXTRACT(@data, '$.Person.Name', '$.Person.Age', '$.Person.Hobbies[1]') AS 'Result';
Resultado:
+---------------------------+ | Result | +---------------------------+ | ["Homer", 39, "Sleeping"] | +---------------------------+