在对象数组中搜索具有特定值的特定键

Posted

技术标签:

【中文标题】在对象数组中搜索具有特定值的特定键【英文标题】:Search an array of objects for specific key having a certain value 【发布时间】:2021-12-12 19:49:21 【问题描述】:

我想从 mysql 表中的一个表中检索所有行,该表中有一个名为 items 的 JSON 列,内容如下:

["code":"MH005","qte":1,"totalpriceItem":"28.00","code":"MH027","qte":1,"totalpriceItem":"28.00"]
["code":"MH027","qte":1,"totalpriceItem":"30.00"]
["code":"MH024","qte":1,"totalpriceItem":"28.00","code":"MH028","qte":1,"totalpriceItem":"28.00","code":"MH027","qte":1,"totalpriceItem":"28.00"]
["code":"MH028","qte":1,"totalpriceItem":"30.00"]

现在我希望能够选择键 code 具有值 MH027 的所有行。

我试过了,但没有成功:

SELECT *
FROM `transactions`
WHERE JSON_CONTAINS(`item`, 'MH027', '$[*].code')

非常感谢任何帮助。

【问题讨论】:

您使用的是什么版本的 MySQL? Items.Row1Items.Row2 等到底是什么意思 Mysql版本:mysql 8.0.18 & mariaDB 10.4.10 表示插入表中每一行的JSON字段内容 【参考方案1】:

如果我理解正确,您需要使用JSON_CONTAINS,如下所示:

SELECT *
FROM transactions
WHERE JSON_CONTAINS(item, '"code": "MH027"', '$')

第二个参数必须是有效的 JSON。如果值是动态的或可能包含特殊字符,您可以使用 JSON_OBJECT('code', 'MH028')

【讨论】:

非常感谢您的帮助 嘿,很抱歉再次打扰我知道这是一个已回答的问题,但我只想知道如何调整它,以便我可以选择项目以“​​MH%”开头的所有交易跨度> 那将是一个不同的问题。我会使用JSON_TABLE 你能指点我吗?

以上是关于在对象数组中搜索具有特定值的特定键的主要内容,如果未能解决你的问题,请参考以下文章

在具有特定键的特定值的数组中查找对象的索引[重复]

如何在laravel中搜索具有数组属性的对象数组

将通用JS集合转换为具有特定键和分组值的对象

JQ:查找具有特定属性值的对象的数组索引

将JS集合转换为具有特定键和分组值的对象

如何从对象数组中获取具有属性的列表,除非它包含具有特定值的另一个项目?