使用 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
我有一个 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