将值附加到存储在 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 解码数组参数的主要内容,如果未能解决你的问题,请参考以下文章

Mysql Json函数之更新

将值附加到字典中的一个列表 将值附加到字典中的所有列表

如何通过 python 将 JSON 数据附加到存储在 Azure blob 存储中的现有 JSON 文件?

将值附加到数据数组并保存在 Userdefault swift

将值附加到R中的空向量?

Swift 4 可解码 - 附加变量