I have a database with one column that is JSON of strings (ex. ["ART","LIT"], etc.). I want to search it using json_contains
.
However, when I try:
json_contains(\`column_name`,"ART")
It errors saying:
Invalid JSON text in argument 2 to function json_contains: "Invalid value." at position 0 in 'ART'.
Note that json_contains
doesn't error with numbers in the place of "ART", just with strings. Any idea what I can do to fix/get around this?
Apparently, it treats integers differently from strings. While json_contains(`column_name`,"1")
is a valid call, to check if it contains "ART", you must use json_contains(`column_name`,'"ART"')
(note the double quoting).
That resolved my issue!
If the column name store tags only (one level array), like ["ART","LIT","SPORTS"]
JSON_CONTAINS(column_name, 'ART', '$')
If the column name store an key-value array like {"tag":"ART","other":"NONE"}
JSON_CONTAINS(column_name, 'ART', '$.tag')
Finally if tag value is inside a parent array, you need to use path like this:
JSON_CONTAINS(column_name, 'ART', '$.parent.tag')
https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#function_json-contains
If your candidate type is string, just add double quotes on your candidate then try again.
json_contains(\`column_name`,'"ART"')
JSON_CONTAINS(target, candidate[, path])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With