![](/img/trans.png)
[英]How to search a value in a nested array inside a JSON in Mysql 8?
[英]How to search nested JSON in MySQL
我正在使用 MySQL 5.7+ 和本机 JSON 数据类型。 样本数据:
[
{
"code": 2,
"stores": [
{
"code": 100,
"quantity": 2
},
{
"code": 200,
"quantity": 3
}
]
},
{
"code": 4,
"stores": [
{
"code": 300,
"quantity": 4
},
{
"code": 400,
"quantity": 5
}
]
}
]
问题:如何提取code = 4
的数组?
以下(工作)查询具有我要提取的数据的 position 和硬编码的搜索条件:
SELECT JSON_EXTRACT(data_column, '$[0]')
FROM json_data_table
WHERE data_column->'$[1].code' = 4
我尝试使用通配符 ( data_column->'$[*].code' = 4
) 但我没有得到任何结果。
SELECT row FROM
(
SELECT data_column->"[*]" as row
FROM json_data_table
WHERE 4 IN JSON_EXTRACT(data_column, '$[*].code')
)
WHERE row->".code" = 4
...虽然如果这不是顶级的未索引对象数组,这将更容易使用。 您可能需要考虑对架构进行一些调整。
注意:
如果您的数据中有多行,指定"$[i]"
将选择该行,而不是它的聚合。 对于您的数据集, "$[1].code"
将始终评估为该单行中code
的值。
基本上,你是在说:
$
json 集合[1]
集合中的第二个对象。.code
属性标记为“代码”。...因为该查询只会有一个匹配项,所以它总是 eval 为 4 ...
WHERE 4 = 4
既然“代码”的全部目的是作为一把钥匙,那就让它成为钥匙。
[
"code2":{
"stores": [
{
"code": 100,
"quantity": 2
},
{
"code": 200,
"quantity": 3
}
]
},
"code4": {
"stores": [
{
"code": 300,
"quantity": 4
},
{
"code": 400,
"quantity": 5
}
]
}
]
那么,它所需要的只是:
SELECT datacolumn->"[code4]" as code4
FROM json_data_table
如果要获取 mysql 中的嵌套 json,则列中必须存在有效的 json。 那么你可以试试
JSON_EXTRACT(json_column,'$.level1.$level1.2') from table;
获取完整示例
这就是你要找的。
SELECT data_column->'$[*]' FROM json_data_table where data_column->'$[*].code' like '%4%'
。
从数组中选择时,所选数据将有[]
周围,因此data_column->'$[*].code' = 4
是不可能的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.