我将这个json存储在数据库中
{
"endDate": "2018-10-10",
"startDate": "2017-09-05",
"oldKeyValue": {
"foo": 1000,
"bar": 2000,
"baz": 3000
},
"anotherValue": 0
}
Run Code Online (Sandbox Code Playgroud)
如何"oldKeyValue"在"newKeyValue"不知道UPDATE查询中键索引的情况下将键重命名为?我正在寻找这样的东西
UPDATE `my_table` SET `my_col` = JSON()
Run Code Online (Sandbox Code Playgroud)
注意:只有密钥需要更改,值(即{"foo": 1000, "bar": 2000, "baz": 3000})应保持不变
Al *_*ndy 12
我个人更喜欢另一种方法:
UPDATE my_table SET my_col = REPLACE(my_col, '"oldKeyValue":', '"newKeyValue":')
Run Code Online (Sandbox Code Playgroud)
这将直接替换JSON字符串中的键名,而不会破坏JSON结构。
我正在使用:附加值,以避免无意中替换值。
Mad*_*iya 11
没有简单的JSON函数可以做到这一点。我们可以结合使用一些JSON函数。
我们将删除oldKey-属性oldValue通过对Json_Remove()功能,然后Json_Insert()将则newkey-属性oldValue对。
Json_Extract() 函数用于获取与JSON文档中的输入键对应的值。
UPDATE `my_table`
SET `my_col` = JSON_INSERT(
JSON_REMOVE(my_col, '$.oldKeyValue'),
'$.newKeyValue',
JSON_EXTRACT(my_col, '$.oldKeyValue')
);
Run Code Online (Sandbox Code Playgroud)
SET @my_col := '{"endDate": "2018-10-10", "startDate": "2017-09-05", "oldKeyValue": {"foo": 1000, "bar": 2000, "baz": 3000}, "anotherValue": 0}';
SET @new_col := JSON_INSERT(
JSON_REMOVE(@my_col, '$.oldKeyValue'),
'$.newKeyValue',
JSON_EXTRACT(@my_col,'$.oldKeyValue')
);
SELECT @new_col;
Run Code Online (Sandbox Code Playgroud)
结果
| @new_col |
| ------------------------------------------------------------------------------------------------------------------------------- |
| {"endDate": "2018-10-10", "startDate": "2017-09-05", "newKeyValue": {"bar": 2000, "baz": 3000, "foo": 1000}, "anotherValue": 0} |
Run Code Online (Sandbox Code Playgroud)
作为替代Json_Extract(),我们还可以使用->运算符来访问与JSON文档中给定键对应的值。
UPDATE `my_table`
SET `my_col` = JSON_INSERT(
JSON_REMOVE(my_col, '$.oldKeyValue'),
'$.newKeyValue',
my_col->'$.oldKeyValue'
);
Run Code Online (Sandbox Code Playgroud)