使用json_table在mariaDB的嵌套json中列出

zdwk9cvp  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(179)

我无法使用json_table从嵌套json中获取数据我的MariaDB服务器是10.6.0

set @json='
{
   "id":"9696e1ac-e173-4905-ac51-c47c0ef8c90b",
   "username":"demo@demo.com",
   "firstName":"DEMO",
   "lastName":"DEMO",
   "email":"demo@demo.com",
   "isEnabled":true,
   "attributes":{
      "ASSOCIATED_COMPANY":"CLCORP001,CLCORP002,CLCORP003,CLCORP004,PECORP001,PECORP002,PECORP003,PECORP004,PECORP005,DECORP001",
      "ROLES":"[\"Super Admin\",\"Admin\",\"Executive\"]",
   },
}';

我试过了,但是没用

SELECT
    *
FROM
    SELECT  * FROM json_table(@json, '$.*' COLUMNS(NESTED PATH '$.attributes.ROLES[*]'  COLUMNS (roles varchar(250) PATH '$'))) roles
TEXT PATH '$'))) roles
a6b3iqyw

a6b3iqyw1#

无论是MySQL还是MariaDB:如果您的json字符串无效,json_object将始终失败。
在MySQL和MariaDB中,您都可以使用json_valid()函数来检查您的json:

set @json='
{
   "id":"9696e1ac-e173-4905-ac51-c47c0ef8c90b",
   "username":"demo@demo.com",
   "firstName":"DEMO",
   "lastName":"DEMO",
   "email":"demo@demo.com",
   "isEnabled":true,
   "attributes":{
      "ASSOCIATED_COMPANY":"CLCORP001,CLCORP002,CLCORP003,CLCORP004,PECORP001,PECORP002,PECORP003,PECORP004,PECORP005,DECORP001",
      "ROLES":"[\"Super Admin\",\"Admin\",\"Executive\"]",
   },
}';

SELECT JSON_VALID(@json);
+-------------------+
| JSON_VALID(@json) |
+-------------------+
|                 0 |
+-------------------+

如果成功,JSON_VALID将返回1。
我没有详细检查,但看起来属性中有额外的引号。不允许使用ROLES。

相关问题