web-dev-qa-db-fra.com

Texte JSON non valide dans l'argument 2 - json_contains dans MySQL 5.7.8

J'ai une base de données avec une colonne qui est JSON de chaînes (ex. ["ART", "LIT"], etc.). Je veux le rechercher en utilisant json_contains.

Cependant, quand j'essaye:

json_contains(\`column_name`,"ART")

Il se trompe en disant:

Texte JSON non valide dans l'argument 2 pour la fonction json_contains: "Valeur non valide." en position 0 dans "ART".

Notez que json_contains ne fait pas d'erreur avec des nombres à la place de "ART", juste avec des chaînes. Une idée de ce que je peux faire pour résoudre/contourner ce problème?

17
Alex Beals

Apparemment, il traite les entiers différemment des chaînes. Bien que json_contains (`column_name`," 1 ") soit un appel valide, pour vérifier s'il contient" ART ", vous devez utiliser json_contains (` column_name`, '"ART"').

Cela a résolu mon problème!

29
Alex Beals

Si le nom de colonne stocke les balises uniquement (un seul niveau), comme ["ART", "LIT", "SPORTS"]

JSON_CONTAINS(column_name, 'ART', '$')

Si le nom de la colonne stocke un tableau de valeurs-clés comme {"tag": "ART", "other": "NONE"}

JSON_CONTAINS(column_name, 'ART', '$.tag')

Enfin, si la valeur de la balise se trouve dans un tableau parent, vous devez utiliser un chemin comme celui-ci:

JSON_CONTAINS(column_name, 'ART', '$.parent.tag')

https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#function_json-contains

8
Benjamin

Si votre type de candidat est une chaîne, ajoutez simplement des guillemets doubles sur votre candidat, puis réessayez.

json_contains(\`column_name`,'"ART"')

JSON_CONTAINS (cible, candidat [ chemin])

2
Joe