【问题标题】:Nested JSON in mysql tablemysql表中的嵌套JSON
【发布时间】: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(您的数据值已编辑,多余的关闭 } 已删除)。为显示的源数据显示所需的输出。

标签: mysql json


【解决方案1】:

也许你需要

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

【讨论】:

  • 这太棒了!非常感谢您,先生!
猜你喜欢
  • 1970-01-01
  • 2014-09-01
  • 2021-10-05
  • 2019-05-05
  • 1970-01-01
  • 2020-05-19
  • 1970-01-01
  • 2018-02-25
  • 1970-01-01
相关资源
最近更新 更多