我想从这里获取数据: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 秒。)
似乎它应该接近工作,因为我从“系统安全计划”节点中提取所有内容并根据元数据进行查询 -> 各方节点以检索“名称”和“类型”。我错过了什么?
非常感谢任何帮助。
答案 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 |
+---------------------------------+--------------+