取消引用从嵌套JSON对象中提取的JSON_EXTRACT值



我在MySQL数据库中有一列json类型,存储的数据结构如下:

table row 1:
{
"products":[
{
"price_c":"800",
"item":"cloth"
},
{
"price_f":"100",
"item":"food"
}
]
}
table row 2:
{
"products":[
{
"price_c":"600",
"item":"cloth"
},
{
"price_f":"200",
"item":"food"
}
]
}

我一直在尝试提取ass"item":"food"price,并使用查询:

SELECT column->>'$**.price_f' as Price FROM table
where JSON_CONTAINS(column, '{"item":"food"}', '$.products');
但是这种方法的问题是它返回
+---------+
|  Price  |
+---------+
| ["100"] |
| ["200"] |
+---------+

虽然我已经使用了->>,但仍然结果不是未引用的,我已经弄清楚这可能是由于通配符$**.price。我试过JSON_UNQUOTE,它也不起作用。如何取消输出的引号?

下面是dbfiddle

中的示例项目

它是一个字符串,所以使用字符串函数来删除不需要的字符

SELECT REGEXP_REPLACE(col1->>'$**.price_f' ,'[^0-9]','') as Price FROM tab1
where JSON_CONTAINS(col1, '{"item":"food"}', '$.products');
|价格||:---- || 200 || 100 |

db<此处小提琴>

MySql 5.7你需要把它们一个一个的放在前面。可以在函数

中完成
SELECT REPLACE(REPLACE(REPLACE(col1->>'$**.price_f' ,'[',''),']',''),'"','')   as Price FROM tab1
where JSON_CONTAINS(col1, '{"item":"food"}', '$.products');
|价格||:---- || 200 || 100 |

db<此处小提琴>

最新更新