替换mysql JSON FIELD中JSON ARRAY的第一个JSON OBJECT



我正在尝试更新一个mysql JSON字段,该字段有一个JSON OBJECTS数组。

尝试使用以下查询

select JSON_REPLACE('{"k1":[{"id":1,"name":"guna","age":34},{"id":2,"name":"guna1","age":34},{"id":3,"name":"guna2","age":34}]}','$.k1[0]','{"id":1,"name":"guna","age":34,"hi":"hi"}');

更新了错误的JSON值。

更新JSON值后,列值在每个("(引号之前都有((斜杠。在更新JSON列时,不应添加斜线。

SET @json := '{"k1":[{"id":1,"name":"guna","age":34},
{"id":2,"name":"guna1","age":34},
{"id":3,"name":"guna2","age":34}]}';
SET @replacement := '{"id":1,"name":"guna","age":34,"hi":"hi"}';
SELECT JSON_OBJECT('k1', JSON_ARRAYAGG(CAST(object AS JSON)))
FROM ( SELECT COALESCE(replacement, object) object
FROM JSON_TABLE(@json,
'$.k1[*]' COLUMNS (rowid FOR ORDINALITY,
object JSON PATH '$')) jsontable
LEFT JOIN (SELECT @replacement replacement) replacement 
ON object->'$.id' = replacement->'$.id' 
ORDER BY rowid ASC LIMIT 2147483647) reconstruction;

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=4b126516d8dd5a5ea151ed3058b037c6


更新JSON值后,列值在每个(quot;(引号之前都有((斜杠。

用于更新的值被视为字符串值,并且所有"都被引用。必须将该值显式转换为JSON数据类型。

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=1ad51f6f1df4a2c1dfdd6daa25ddcb88

最新更新