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.