Home > Mobile >  MYSQL JSON search returns results in square brackets
MYSQL JSON search returns results in square brackets

Time:10-27

I am conducting a simple search of JSON held in a MySQL database, however the results are returning enclosed in square brackets and quotes.

SELECT stored_json->>'$.*.referal' AS referal FROM table WHERE id =  100

results in

 ------------ 
| referal    |
 ------------ 
| ["search"] |
 ------------ 

Is there a way to get MYSQL to return the results without the brackets and quotes?

 ------------ 
| referal    |
 ------------ 
| search     |
 ------------ 

Thanks

Edit

JSON example

{
    "100": {
            "referal": "search"
    }
}

CodePudding user response:

If you just want a single value from the array, then extract that value and unquote it:

SELECT JSON_UNQUOTE(JSON_EXTRACT(
    JSON_EXTRACT(stored_json, '$.*.referal'), '$[0]')) AS referal
FROM ...

 --------- 
| referal |
 --------- 
| search  |
 --------- 

The JSON_UNQUOTE() function converts the result to a string, but if you give it a JSON array or object, it can't remove the brackets and double-quotes. Those just become part of the string. You must extract a single scalar value from the JSON, and then you can use JSON_UNQUOTE() to remove the double-quotes.

I suppose you might want to get results if there are more than one value in your JSON document.

 ---------------------------- 
| referal                    |
 ---------------------------- 
| ["search","word of mouth"] |
 ---------------------------- 

Sorry, I don't see a solution for this, other than:

REPLACE(..., '[', '')

And so on, removing the other characters you don't want.

In MySQL 8.0, the function REGEXP_REPLACE() can strip multiple characters in one pass:

REGEXP_REPLACE(..., '["\\[\\]]', '')
  • Related