从存储在 MySQL 数据库中的 json 字符串中删除 key:value

Remove a key:value from json string stored in a MySQL database

我在 table 中有一列以以下格式存储:

{"field1":"val1","field2":"val4"}
{"field1":"val2","field2":"val5"}
{"field1":"val3","field2":"val6"}

我需要删除所有带值的 field1(例如 "field1":"val1","field1":"val2","field1":"val3" ) 结果应该是

{"field2":"val4"}
{"field2":"val5"}
{"field2":"val6"}

我正在尝试通过替换来实现这一点,但卡在“"field1":"val1"”中,字符串 val1 可以是任何值,例如 null,一些整数。

UPDATE emp SET col = REPLACE(col, '"field1":"val1"', '')

由于 val1 的这个动态值,我被卡住了。

你可以这样做:

SELECT SUBSTRING(Field, 1, INSTR(Field, '"field1"')) + SUBSTRING(Field, INSTR(Field, '"field2"'), LENGTH(Field)) FROM @Temp

我不知道这是否可行,但就是这个主意。 (无法测试 ATM)

这是 MsSQL 的等价物(有效,刚刚测试过!):

SELECT SUBSTRING(Field, 0, CHARINDEX('"field1"', Field)) + SUBSTRING(Field, CHARINDEX('"field2"', Field), LEN(Field)) FROM @Temp

我更愿意使用 JSON_REMOVE 函数 (MySQL) :

UPDATE emp
SET emp.col = JSON_REMOVE(emp.col, '$.field1');

您还可以添加 WHERE 子句:

WHERE emp.col LIKE '%val6%';

参考文献: MySQL JSON_REMOVE and MySQL JSON path

博客 post 示例: MySQL for your JSON

以及 MySQL 中关于 json 路径的注释:

Propery names in path must be double quoted if the property identifier contains interpunction (spaces, special characters, meta characters) bugs.mysql.com