[英]Nested JSON in mysql table
我的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" 部分。 它返回一个空表。
我需要在我的代码中添加什么来处理这个问题? 感谢您的任何见解。
也许你需要在
SELECT Geometry.ID, jsontable1.type, jsontable1.object_floor, jsontable2.*
FROM Geometry
CROSS JOIN JSON_TABLE( Geometry.FORM,
'$' COLUMNS ( type VARCHAR(255) PATH '$.type',
corners JSON PATH '$.corners',
object_floor INT PATH '$.floor' ) ) jsontable1
CROSS JOIN JSON_TABLE( jsontable1.corners,
'$[*]' COLUMNS ( ROWID FOR ORDINALITY,
x VARCHAR(255) PATH '$.x',
y VARCHAR(255) PATH '$.y',
corner_floor VARCHAR(255) PATH '$.floor' ) ) jsontable2
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=5d95a6a3392409ebf851fc9a87840926
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.