Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Exemplos de JSON_CONTAINS_PATH() no MySQL


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.