In MySQL, il JSON_CONTAINS()
la funzione verifica se un valore specificato viene trovato o meno nel documento JSON specificato o, facoltativamente, nel percorso specificato all'interno del documento.
Se viene trovato il valore, JSON_CONTAINS()
restituisce 1
, altrimenti restituisce 0
.
Sintassi
La sintassi è questa:
JSON_CONTAINS(target, candidate[, path])
La funzione restituisce 1
o 0
a seconda che un dato candidate
Il documento JSON è contenuto all'interno di un target
documento JSON o, se un path
argomento è stato fornito, se il candidato si trova in un percorso specifico all'interno della destinazione.
Esempio 1 – Due argomenti
Ecco un esempio per dimostrare l'utilizzo di base senza specificare un percorso (ovvero fornendo solo due argomenti).
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '{"c": {"d": 3}}'; SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;
Risultato:
+--------+ | Result | +--------+ | 1 | +--------+
Nota le parentesi graffe attorno al secondo argomento. Questi sono necessari per renderlo JSON valido. Se omettiamo le parentesi graffe, finiremo con un errore:
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '"c": {"d": 3}'; SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;
Risultato:
ERROR 3141 (22032): Invalid JSON text in argument 2 to function json_contains: "The document root must not be followed by other values." at position 3.
Esempio 2 – Tre argomenti
In questo esempio aggiungo un terzo argomento, per indicare un percorso specifico per il quale trovare il secondo argomento nel primo argomento.
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '1'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;
Risultato:
+--------+ | Result | +--------+ | 1 | +--------+
In questo caso, il secondo argomento è stato trovato nel primo argomento nel percorso specificato dal terzo argomento.
Se non fosse stato trovato, ci ritroveremmo con questo:
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '2'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;
Risultato:
+--------+ | Result | +--------+ | 0 | +--------+
Esempio 3 – Notazione del punto
Puoi utilizzare la notazione a punti per indicare percorsi specifici all'interno del documento JSON.
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '3'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.c.d') AS Result;
Risultato:
+--------+ | Result | +--------+ | 1 | +--------+