使用 JSON_TABLE 获取嵌套的 JSON 数组

Using JSON_TABLE to fetch a nested JSON array

我有一个 Json 数组,如下所示

[{"keyId": "aded5b0107bb5a936604bcb6f", "keyNames": ["abc1, abc2"], "keyDesc": "test"}]

我正在使用 JSON_TABLE 获取所有值,并且我编写了以下查询:

SELECT j.keyId, j.keyNames, j.keyDesc
FROM table t, JSON_TABLE(value, '$[*]' 
    COLUMNS(
      keyId TEXT PATH '$.keyId' 
      keyNames TEXT PATH '$.keyNames',
      keyDesc TEXT PATH '$.keyDesc')
    ) AS j;

我得到以下输出:

keyId                        keyNames   keyDesc
aded5b0107bb5a936604bcb6f    NULL       test

如何修改查询以获得 keyNames 的值 "abc1, abc2" 而不是 NULL

你需要 NEStED PATH 因为它是一个新数组

CREATE TABLE t
    ( `value` TEXT)
;
    
INSERT INTO t
    ( `value`)
VALUES
    ('[{"keyId": "aded5b0107bb5a936604bcb6f", "keyNames": ["abc1, abc2"], "keyDesc": "test"}]')
SELECT  
j.keyId, j.keyNames,  j.keyDesc

FROM t, JSON_TABLE(value, '$[*]' 
    COLUMNS(
      keyId TEXT PATH '$.keyId' 
      ,NESTED PATH '$.keyNames[*]' COLUMNS (keyNames varchar(10) PATH '$')
     , keyDesc TEXT PATH '$.keyDesc'
)
    ) AS j;
keyId                     | keyNames   | keyDesc
:------------------------ | :--------- | :------
aded5b0107bb5a936604bcb6f | abc1, abc2 | test   

db<>fiddle here