mysql - MySQL 解析和拆分 JSON 值
问题描述
我有一列包含不同长度的 JSON 值
["The Cherries:2.50","Draw:3.25","Swansea Jacks:2.87"]
我想将它们拆分并存储为 JSON,如下所示:
[
{
name: "The Cherries",
odds: 2.50
},
{
name: "Draw",
odds: 3.25
},
{
name: "Swansea",
odds: 2.87
},
]
我现在所做的是在 UI 中循环和拆分它们,这对我来说对客户端来说是相当沉重的。我想在一个查询中解析和拆分它们。
解决方案
如果您正在运行 MySQL 8.0,您可以使用json_table()
将原始数组拆分为行,然后构建新对象并使用json_arrayagg()
.
我们需要一个主键列(或一组列),以便我们可以正确聚合生成的行,我假设id
:
select
t.id,
json_arrayagg(json_object(
'name', substring(j.val, 1, locate(':', j.val) - 1),
'odds', substring(j.val, locate(':', j.val) + 1)
)) new_js
from mytable t
cross join json_table(t.js, '$[*]' columns (val varchar(500) path '$')) as j
group by t.id
样本数据:
编号 | js -: | :------------------------------------------------ ------ 1 | [“樱桃:2.50”,“平局:3.25”,“斯旺西杰克:2.87”]
Query results:
id | new_js -: | :---------------------------------------------------------------------------------------------------------------------- 1 | [{"name": "The Cherries", "odds": "2.50"}, {"name": "Draw", "odds": "3.25"}, {"name": "Swansea Jacks", "odds": "2.87"}]
推荐阅读
- canvas - 使用缓存时未使用 KonvaJS 在画布上绘制大图像
- python - 使用 Python 处理 PDF
- json - 弹性查询字符串返回不需要的值
- sql - SQL - 过滤数据仅显示更改历史记录
- javascript - Angular-当我单击一个组件时,该组件的所有实例都会重新初始化
- python - Python - 如何根据索引将列表中的几个元素合并到元组中?
- scikit-learn - 如何返回在 sklearn 中由 DecisionTreeClassifier 创建的决策树中使用的特征
- python - 如何用相同的数字后跟标点符号替换单个数字?
- selenium - Firefox 浏览器崩溃木偶错误壁虎硒
- r - R Shiny Single Plot 填充整个仪表板页面