0

I am using MySQL 8 and trying to update JSON data type in a mysql table

My table t1 looks as below:

# id    key     value   
1100000 key123  [{"name": "name1", "hosts": ["host123"]}]

Now, I have a list of hosts hostlist as below:

SET @hostlist = '["host343", "host345"]';

I want to append @hostlist to the hosts array within value JSON Array:

UPDATE table t1
        SET t1.value = JSON_ARRAY_APPEND('[]', '$', JSON_OBJECT('hosts', @hostlist))
        WHERE t1.key = 'key123';
    

Desired Output:

[{"name": "name1", "hosts": ["host123","host343", "host345"]}]

1 Answer 1

2

You need to use a path to the hosts property in the existing value and append to that.

But JSON_ARRAY_APPEND() is for appending a single value to the array. You need to use JSON_MERGE_PRESERVE() to concatenate arrays. Then use JSON_REPLACE() to replace the array with this.

UPDATE t1
SET value = JSON_REPLACE(t1.value, '$[0].hosts', JSON_MERGE_PRESERVE(t1.value->'$[0].hosts', @hostlist))
WHERE t1.key = 'key123';

DEMO

Sign up to request clarification or add additional context in comments.

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.