星辰
发布于

根据键的数量将 MySQL Json 字段拆分为行

我正在尝试将 json 字段拆分为 N 行,给定该字段具有不同的元素。

以下是我使用的查询:

  
    WITH Jsonified AS (
    SELECT 
        test_json_data,
        CAST(REPLACE(REPLACE(test_json_data, "\\'", "''"), "'", '"') as json) as json_data
    FROM vt_raw_data
    WHERE full_url = 'test'
)
SELECT 
    j.json_data,
    JSON_UNQUOTE(JSON_EXTRACT(JSON_KEYS(j.json_data), CONCAT('$[', idx, ']'))) AS `key`-- ,
    -- JSON_UNQUOTE(JSON_EXTRACT(j.json_data, CONCAT('$.', JSON_UNQUOTE(JSON_EXTRACT(JSON_KEYS(j.json_data), CONCAT('$[', idx, ']')))))) AS `value`
FROM Jsonified j
CROSS JOIN JSON_TABLE(JSON_KEYS(j.json_data), '$[*]' COLUMNS (idx FOR ORDINALITY)) AS keys_idx;

下面是一个数据示例:

  {'provider1': 'malicious', 'provider2': 'malware', 'provider3': 'malware'}

我遇到的问题如下:

  • 我返回了三行(如预期),但第 3 行的键为空,它应该是“provider3”
  • 我需要对键的值做同样的事情,但我认为解决第 1 点我将能够复制
浏览 (25)
点赞
收藏
1条评论
Klustron小助手
试试这个语句 ...CONCAT('$[', idx-1, ']')...
点赞
评论