如何在MariaDB或MySQL中从JSON数组中提取值?

t1rydlwq  于 2022-11-08  发布在  Mysql
关注(0)|答案(1)|浏览(257)

情况
我在MariaDB数据库中有一个表。这个表有一个LONGTEXT列,用于存储一个JSON数组(在MariaDB JSON Data Type中阅读更多关于这个主题的信息)。

问题

我想根据某个键从JSON数组中提取值。我如何使用MariaDB(或MySQL)来实现这一点?

示例

下面是简化的表thing(仅用于演示):
| 标识符|事物名称|这些例子|
| - -|- -|- -|
| 第0页|果实|[{"color": "green","title": "Apple"},{"color": "orange","title": "Orange"},{"color": "yellow","title": "Banana"}]个|
| 一个|汽车|[{"color": "silver","title": "VW"},{"color": "black","title": "Bentley"},{"color": "blue","title": "Tesla"}]|

我的目标是从JSON数组中提取所有的title值。

flseospp

flseospp1#

您可以使用JSON_EXTRACT来执行此任务(适用于MariaDB和MySQL)。此函数还支持通配符,如以下文档中所述:
路径可以包含 * 或**通配符
根据您是否有多个数据级别(例如,单个文档与数组),应使用单个或两个星号通配符:

JSON_EXTRACT(json,'$**.key')

json是一个有效的JSON文档(例如一个列),key是使用的查找关键字。

以您为例

要查找JSON数组中的所有title值,请使用以下查询:

SELECT id, thing_name, JSON_EXTRACT(examples, '$**.title') as examples_titles FROM thing

| 标识符|事物名称|示例_标题|
| - -|- -|- -|
| 第0页|果实|["Apple", "Orange", "Banana"]|
| 一个|汽车|["VW", "Bentley", "Tesla"]|

相关问题