No MySQL, o
JSON_CONTAINS_PATH()
A função testa se um caminho especificado é encontrado ou não no documento JSON fornecido. Se o caminho for encontrado,
JSON_CONTAINS_PATH()
retorna 1
, caso contrário, ele retornará 0
. Sintaxe
A sintaxe fica assim:
JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)
Onde
json_doc
é o documento JSON, one_or_all
é a palavra-chave one
ou all
(para indicar se apenas um caminho precisa existir ou todos os caminhos devem existir antes de retornar 1
) e path
é o caminho real. Exemplo 1 – Uso básico
Aqui está um exemplo para demonstrar o uso básico.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a') AS Result;
Resultado:
+--------+ | Result | +--------+ | 1 | +--------+
O caminho
$.a
existe no documento JSON e, portanto, o resultado é 1
. Usamos one
como o segundo argumento, mas neste caso obteríamos o mesmo resultado se tivéssemos especificado all
. SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a') AS Result;
Resultado:
+--------+ | Result | +--------+ | 1 | +--------+
Se especificarmos um caminho que não existe, obteremos
0
. Exemplo:SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.z') AS Result;
Resultado:
+--------+ | Result | +--------+ | 0 | +--------+
Exemplo 2 – Vários caminhos
Nos exemplos a seguir, especificamos dois caminhos.
No primeiro exemplo, um caminho existe, mas o outro não. Mas porque eu uso
one
como segundo argumento, o resultado é positivo (porque existe pelo menos um dos caminhos). SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a', '$.z') AS Result;
Resultado:
+--------+ | Result | +--------+ | 1 | +--------+
Se mudarmos
one
para all
obtemos um resultado negativo. SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a', '$.z') AS Result;
Resultado:
+--------+ | Result | +--------+ | 0 | +--------+
Isso ocorre porque o
all
palavra-chave requer que todos os caminhos existam no documento JSON antes de retornar um 1
. Exemplo 3 – Notação de Ponto
Você pode usar a notação de ponto para indicar caminhos específicos no documento JSON.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c.d') AS Result;
Resultado:
+--------+ | Result | +--------+ | 1 | +--------+
Exemplo 4 – Matrizes
Aqui estão alguns exemplos de matrizes.
O primeiro exemplo retorna um resultado positivo.
SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[0]') AS Result;
Resultado:
+--------+ | Result | +--------+ | 1 | +--------+
O próximo exemplo retorna um resultado negativo.
SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[3]') AS Result;
Resultado:
+--------+ | Result | +--------+ | 0 | +--------+
Isso retorna negativo porque as matrizes usam numeração baseada em zero. Portanto, o caminho
$.c[3]
representa o quarto elemento, mas a matriz contém apenas três elementos.