将值附加到存储在 MySQL 中的 JSON 解码数组参数
Posted
技术标签:
【中文标题】将值附加到存储在 MySQL 中的 JSON 解码数组参数【英文标题】:Append value to JSON decode array parameter stored in MySQL 【发布时间】:2015-08-16 03:10:14 【问题描述】:我正在尝试根据某些条件,为存储在 mysql 表中的多个记录,将零附加到特定的 JSON 解码数组值。
例如,对于表 'menu',列 'params'(text) 的记录包含这种格式的 JSON 解码数组:
"categories":["190"],"singleCatOrdering":"","menu-anchor_title":""
“id”列的数值为 90。
我的目标是每当(例如)menu.id 低于 100 时,在 menu.params 中的“类别”值中添加一个零。
对于这个记录结果是
"categories":["1900"],"singleCatOrdering":"","menu-anchor_title":""
所以我正在寻找一个 SQL 查询,它将在数据库中搜索和查找“类别”的出现:[“999”],并通过在值的末尾添加一个零来更新记录。
这个answer 提供了使用mysql-udf-regexp 的部分帮助,但它指的是替换一个值而不是更新它。 也许是 REGEXP_REPLACE?功能将解决问题。我从来没有使用过这个库,也不熟悉它,也许有更简单的方法来实现我需要的?
谢谢
【问题讨论】:
切换到 MariaDB;它兼容 MySQL,但也有 JSON 操作功能。 嗨@RickJames,这是个好主意,但目前我做不到,我正在做的工作是使用 MySQL 的 Joomla CMS 的一部分...... Joomla 不应该注意到差异。 (不,我没有真实的证据来支持这种说法。) 谢谢,我继续构建了一个 php 脚本来完成这项工作...... 【参考方案1】:如果我正确理解您的问题,您需要执行以下操作的代码:
var data =
"menu":
"id": 90,
"params":
"categories": ["190"],
"singleCatOrdering": "",
"menu-anchor_title": ""
;
var keys = Object.keys(data);
var columns;
for (var ii = 0, key; key = keys[ii]; ii++)
value = data[key];
if (value.id < 100)
value.params.categories[0] += "0";
alert(value.params.categories[0]);
jsFiddle
但是,我根本没有使用正则表达式。也许如果你改写问题,正则表达式的必要性会变得更加清晰。
【讨论】:
嗨@James,谢谢,但我正在寻找一个 SQL 查询,它将在 JSON 数组中搜索并找到 "categories": ["999"] 的出现并在末尾添加一个零通过更新记录的数字...希望它更清楚 SQL 查询将允许您从数据库中插入和提取数据。它不允许您操纵数据。为此,您需要使用用户定义的函数,或像 PHP 这样的服务器端代码。如果您在数据库中存储 JSON 字符串,那么 NoSQL 数据库可能是更好的选择。您能否解释一下大局,以便我们了解您正在努力解决什么问题? 嗨@James Newton,大局是这样的:我有包含此 JSON 编码数据的记录,我要做的就是更新它们,以便“类别”值后面有另一个零。我原以为您可以使用 REGEX 在 JSON 字符串中隔离此值,并使用 MySQL UPDATE 更改它。太复杂了?以上是关于将值附加到存储在 MySQL 中的 JSON 解码数组参数的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 python 将 JSON 数据附加到存储在 Azure blob 存储中的现有 JSON 文件?