如何在 MySQL 中将元素推送到 JSON

Posted

技术标签:

【中文标题】如何在 MySQL 中将元素推送到 JSON【英文标题】:how to push an element to a JSON in MySQL 【发布时间】:2018-08-12 04:07:38 【问题描述】:

我正在尝试将新元素推送到 mysql 中的 JSON 数组。

例如。在下表中的人:

id(int)     liked_ids(JSON)
   1              [2,3]

现在我想将 5 推入 like_ids。

我查看了 JSON_ARRAY_APPEND,但即使从文档中也找不到使用它的方法。

【问题讨论】:

【参考方案1】:

你需要使用:

UPDATE tab
SET liked_ids = JSON_ARRAY_APPEND (liked_Ids, '$', 5)
WHERE id = 1;

DBFiddel Demo

编辑:

我的 like_ids 最初为 null。创建表时如何强制将其默认为数组?

你可以试试CASE 表达式:

UPDATE tab
SET liked_ids = CASE WHEN liked_ids IS NULL THEN '[5]'
                ELSE  JSON_ARRAY_APPEND (liked_Ids, '$', 5)
                END
WHERE id = 1;

--or as @Paul Spiegel mentioned
UPDATE tab
SET liked_ids = COALESCE(JSON_ARRAY_APPEND(liked_Ids, '$', 5), JSON_ARRAY(5))
WHERE id = 1;

DBFiddle Demo2

【讨论】:

我的 like_ids 最初为 null。如何在创建表时默认将其强制为数组,以便您的上述解决方案有效? 太糟糕了,JSON_ARRAY_APPEND 不喜欢空数组。但是您可以使用 COALESCE(JSON_ARRAY_APPEND(liked_Ids, '$', 5), JSON_ARRAY(5)) 之类的东西来代替 CASE 语句。 字段必须为 Null,就像真正的 null,其中包含 NULL 关键字,而不仅仅是空的。为此,我已经挣扎了一个小时。 :(

以上是关于如何在 MySQL 中将元素推送到 JSON的主要内容,如果未能解决你的问题,请参考以下文章

如何在nodeJS的mysql查询中将值推送到数组?

如何在 angularjs 中将元素推送到 http.put 中的数组?

在codeigniter中将json数据推送到数据库

如何在一个数据库命中中将多个插入或更新推送到一起 - 对于多数据库(SQL Server、Oracle、MySQL 和 PostgreSQL)应用程序

如何在本机反应中将设备的通知推送到另一台设备

如何在 SwiftUI 中将文本推送到边缘