【发布时间】:2021-05-17 07:14:14
【问题描述】:
我的mysql 数据库中有一个表db.Geometry,其中有一个名为FORM 的列,其中包含所有此类类型的json 字符串:
{"type":"polygon","corners":[{"x":43.790000915527344,"y":2.6940000057220463,"floor":0},{"x":44.884937766905495,"y":8.128635658848992,"floor":0},{"x":24.52993631732053,"y":12.229635729420892,"floor":0},{"x":23.434999465942386,"y":6.795000076293945,"floor":0}],"floor":0}}
我正在寻找的是取消嵌套并创建一个包含列的表:type, x,y,floor。现在,如果字符串具有以下外观:
{"corners":[{"x":43.790000915527344,"y":2.6940000057220463,"floor":0},{"x":44.884937766905495,"y":8.128635658848992,"floor":0},{"x":24.52993631732053,"y":12.229635729420892,"floor":0},{"x":23.434999465942386,"y":6.795000076293945,"floor":0}],"floor":0}
我会做以下事情:
SELECT ID, Tab.*
FROM db.Geometry
CROSS JOIN JSON_TABLE(
db.Geometry.FORM-> '$.corners',
'$[*]' COLUMNS (
x VARCHAR(255) PATH '$.x',
y VARCHAR(255) PATH '$.y',
floor VARCHAR(255) PATH '$.floor'
)
) Tab;
但这显然在我实际遇到的情况下不起作用,因为我不处理 json 字符串的 "type":"polygon" 部分。它返回一个空表。
我需要在我的代码中添加什么来处理这个问题?感谢您提供任何见解。
【问题讨论】:
-
它返回一个空表。 ?? fiddle(您的数据值已编辑,多余的关闭
}已删除)。为显示的源数据显示所需的输出。