从存储在 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的主要内容,如果未能解决你的问题,请参考以下文章
Android AsyncTask 无法从 php-mysql 检索 JSON 字符串