SUPER类型中JSON数据的展开方法求助
解决方案:展开SUPER类型中的嵌套JSON数据
问题原因
你调用的JSON_EXTRACT_PATH_TEXT和JSON_EXTRACT_ARRAY_ELEMENT_TEXT是针对JSON/VARCHAR类型的函数,不支持SUPER类型,这就是报错的根本原因。SUPER类型有专属的语法和操作方式,无需依赖这些传统JSON函数。
核心操作方法
1. 提取单个字段(含嵌套字段)
使用箭头操作符->(保留SUPER类型)或->>(直接转成字符串)访问字段,支持多层嵌套:
- 提取顶层字段:
your_super_column->>'id' - 提取嵌套对象字段:
your_super_column->'name'->>'en'
2. 展开嵌套数组
用UNNEST函数配合SUPER数组,将数组元素拆分为独立行。以你提供的数据结构为例,展开subItems数组的示例SQL如下(假设表名为order_items,SUPER字段为json_data):
SELECT -- 提取顶层字段 json_data->>'id' AS order_item_id, json_data->>'productModelId' AS product_model_id, json_data->'name'->>'en' AS name_en, json_data->'name'->>'th' AS name_th, json_data->>'status' AS status, json_data->>'totalPrice' AS total_price, -- 展开subItems数组,提取子项字段 sub_item->>'sku' AS sub_item_sku, sub_item->'name'->>'en' AS sub_item_name_en, sub_item->'name'->>'th' AS sub_item_name_th, sub_item->>'qty' AS sub_item_qty, sub_item->>'pricePerUnit' AS sub_item_price_per_unit, sub_item->>'vatTotal' AS sub_item_vat_total FROM order_items, UNNEST(json_data->'subItems') AS t(sub_item)
3. 多层嵌套数组处理
如果存在更深层的嵌套数组(比如imageUrls下还有数组),可以继续嵌套UNNEST:
SELECT json_data->>'id' AS order_item_id, image_url AS item_image_url FROM order_items, UNNEST(json_data->'imageUrls') AS t(image_url)
4. 访问数组指定元素
直接用索引访问数组元素(索引从0开始):
-- 获取imageUrls数组的第一个元素 SELECT json_data->'imageUrls'[0] AS first_image_url FROM order_items
内容的提问来源于stack exchange,提问作者paster
相关产品推荐
相关产品推荐

