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

Posted

技术标签:

【中文标题】从存储在 MySQL 数据库中的 json 字符串中删除 key:value【英文标题】:Remove a key:value from json string stored in a MySQL database 【发布时间】:2016-06-13 23:51:43 【问题描述】:

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

"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 的这个动态值,我被卡住了。

【问题讨论】:

您需要使用正则表达式来实现这一点。见this post。但是,有些人似乎找到了解决方法。 如果您使用 php,您可以迭代每一行并使用下面的代码来获取没有 field1 $str='"field1":"val1","field2":"val4 的特定行"'; $array = json_decode($str); foreach ($array as $key => $value) if($key=="field1") continue;否则 echo "$key:$value"; 【参考方案1】:

我更喜欢使用 JSON_REMOVE 函数(mysql):

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

您还可以添加 WHERE 子句:

WHERE emp.col LIKE '%val6%';

参考文献: MySQL JSON_REMOVE 和 MySQL JSON path

带有示例的博文: MySQL for your JSON

还有一个关于 MySQL 中 json 路径的说明:

如果属性标识符包含注释(空格、特殊字符、元字符)bugs.mysql.com,则路径中的属性名称必须双引号

【讨论】:

【参考方案2】:

你可以这样做:

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

【讨论】:

以上是关于从存储在 MySQL 数据库中的 json 字符串中删除 key:value的主要内容,如果未能解决你的问题,请参考以下文章

MySQL_关于JSON数据的查询

MySQL_关于JSON数据的查询

Android AsyncTask 无法从 php-mysql 检索 JSON 字符串

如何解析Mysql中的JSON字符串?

PHP:将共享用户数据作为 JSON 字符串存储在 MySQL 中的想法有多糟糕?

如何定义一个表来存储 MySQL 数据库中的 JSON 对象?