mySQL JSON_TABLE 查询返回嵌套数据

时间:2021-02-18 22:17:05

标签: mysql json

我想从这里获取数据:https://raw.githubusercontent.com/usnistgov/oscal-content/master/examples/ssp/json/ssp-example.json

我已将其放入名为“ssp_models”的 mySQL 数据库中,放入名为“json_data”的 JSON 列中,我需要从嵌套 3 个级别的“party”节点中检索“名称”和“类型”值很深。

我一直在尝试关注这篇关于如何检索嵌套数据的博文:https://mysqlserverteam.com/json_table-the-best-of-both-worlds/

而且我正在为嵌套选择过程而苦苦挣扎。显然这不是正确的方法:

SELECT "system-security-plan.*" 
FROM ssp_models, 
     JSON_TABLE(json_data, '$.metadata[*]' COLUMNS (
          NESTED PATH '$.parties[*]' COLUMNS (
                name VARCHAR(140)  PATH '$.name',
                type VARCHAR(140)  PATH '$.type')
     )) parties;

目前,我一无所获:

MySQL 返回一个空结果集(即零行)。 (查询耗时 0.0024 秒。)

似乎它应该接近工作,因为我从“系统安全计划”节点中提取所有内容并根据元数据进行查询 -> 各方节点以检索“名称”和“类型”。我错过了什么?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您不需要嵌套路径,因为 JSON 只包含从顶层到您想要成为 json 表行的数组的对象内对象:

SELECT parties.name, parties.type
FROM ssp_models,
     JSON_TABLE(json_data, '$."system-security-plan".metadata.parties[*]' COLUMNS (
                name VARCHAR(140)  PATH '$.name',
                type VARCHAR(140)  PATH '$.type')
     ) parties

输出:

+---------------------------------+--------------+
| name                            | type         |
+---------------------------------+--------------+
| Enterprise Asset Owners         | organization |
| Enterprise Asset Administrators | organization |
| Legal Department                | organization |
| IT Department                   | organization |
| Acme Corp                       | organization |
+---------------------------------+--------------+