6

I would like my MySql query to return a JSON object that looks as follows:

{"name": "Piotr", "likesMysql": true}

This seems to be working fine when I do:

SELECT json_object(
    'name', 'Piotr',
    'likesMysql', TRUE
)

However when I try to derive the likesMysql from an if expression I get 0 and 1 instead of false and true e.g.:

SELECT json_object(
    'name', 'Piotr',
    'likesMysql', if(4 MOD 2 = 0, TRUE, FALSE)
)

results in

{"name": "Piotr", "likesMysql": 1}

How do I use the json_object to construct a JSON object that has true or false as property value?

4 Answers 4

23

This seems to be a bug in MySql.

You can workaround it though with cast(true as json) e.g.:

SELECT json_object(
    'name', 'Piotr',
    'likesMysql', if(4 MOD 2 = 0, cast(TRUE as json), cast(FALSE as json))
)
Sign up to request clarification or add additional context in comments.

3 Comments

Having just come across this post, I respectfully have to comment that this is probably the most correct answer, both programmatically and for readability purposes. Although the answer provided by Aniket may work under most conditions. IMHO.
Works with 5.7.34
SELECT CAST( FALSE AS json ) doesnt work for 11.7.2-MariaDB-log and 10.2.11-MariaDB-log
5

Simply go with following,

SELECT json_object( 'name', 'Piotr', 'likesMysql', if(5 MOD 2 = 0, TRUE, FALSE) is true )

Hope you get desired result with this :)

Comments

2

Aniket Bhansali's approach could be simplified as:

select json_object(
    'bool_true', (4 mod 2 = 0) is true,
    'bool_false', 0 is true) b;

which returns

{"bool_true": true, "bool_false": false}

Tested on mysql 8.

Comments

1
SELECT json_object(
   'name', 'Piotr',
   'likesMysql', 4 MOD 2 != 0
)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.