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 | +--------+