MySQL查询将key:value附加到JSON字符串

时间:2013-06-13 23:53:21

标签: mysql sql

我的表中有一列一个JSON字符串,它有嵌套对象(所以一个简单的REPLACE函数无法解决这个问题)。例如:{'name':'bob', 'blob': {'foo':'bar'}, 'age': 12}。将值附加到JSON字符串末尾的最简单查询是什么?因此,对于该示例,我希望最终结果如下所示:{'name':'bob', 'blob': {'foo':'bar'}, 'age': 12, 'gender': 'male'}解决方案应该足够通用,以适用于任何JSON值。

3 个答案:

答案 0 :(得分:1)

这个怎么样?

UPDATE table SET table_field1 = CONCAT(table_field1,' This will be added.');

修改

在插入之前,我个人会用PHP这样的语言进行操作。更容易。无论如何,这是你想要的吗?这应该可以提供您正在添加的json格式,格式为{'key':'value'}

 UPDATE table
 SET col = CONCAT_WS(",", SUBSTRING(col, 1, CHAR_LENGTH(col) - 1),SUBSTRING('newjson', 2));

答案 1 :(得分:0)

我认为您可以使用REPLACE函数来实现此目标

UPDATE table
SET column = REPLACE(column, '{\'name\':\'bob\', \'blob\': {\'foo\':\'bar\'}, \'age\': 12}', '{\'name\':\'bob\', \'blob\': {\'foo\':\'bar\'}, \'age\': 12, \'gender\': \'male\'}')

注意正确转义json中的所有引号

当您请求嵌套的json时,我认为您可以使用SUBSTRING函数删除字符串的最后一个字符,然后使用CONCAT

追加您需要的任何内容
UPDATE table
SET column = CONCAT(SUBSTRING(column, 0, -1), 'newjsontoappend')

答案 2 :(得分:0)

修改杰克的回答。在第一次更新时,甚至列值都是空的。

update table
 set column_name = case when column_name is null or column_name ='' 

 then "{'foo':'bar'}"
 else CONCAT_WS(",", SUBSTRING(column_name, 1, CHAR_LENGTH(column_name) - 1),SUBSTRING("{'foo':'bar'}", 2))
 end