在JSON数据大行其道的今天,KingbaseES作为国产数据库佼佼者,提供了丰富的JSON处理能力。今天我们将揭秘7个核心JSON数组操作函数,助你轻松玩转复杂数据结构!
📚 一、JSON数组操作函数全家福
函数名称 | 功能简述 | 适用类型 |
---|---|---|
JSONB_ARRAY_ELEMENTS | 展开JSON数组为多行JSON对象 | JSONB |
JSONB_ARRAY_ELEMENTS_TEXT | 展开JSON数组为多行文本 | JSONB |
JSONB_ARRAY_LENGTH | 获取最外层数组长度 | JSONB |
JSON_ARRAY_ELEMENTS | 同JSONB版本,适用于JSON类型 | JSON |
JSON_ARRAY_ELEMENTS_TEXT | 同JSONB版本,适用于JSON类型 | JSON |
JSON_ARRAY_LENGTH | 同JSONB版本,适用于JSON类型 | JSON |
JSON_ARRAYAGG | 将多行数据聚合成JSON数组 | 通用 |
🛠️ 二、核心函数详解
1️⃣ 数组展开神器:*ARRAY_ELEMENTS系列
应用场景:将嵌套数组拆分为多行记录
-- JSONB示例
SELECT jsonb_array_elements('[{"id":1}, {"id":2}]');
-- 结果:
-- {"id":1}
-- {"id":2}
-- 文本版示例
SELECT jsonb_array_elements_text('["a", 1, true]');
-- 结果:
-- "a"
-- 1
-- true
💡 避坑指南:若操作对象非数组,将报错无法从对象提取元素
2️⃣ 数组长度速查:*ARRAY_LENGTH
应用场景:快速统计数组元素数量
SELECT jsonb_array_length('[1,2,{"data":3}]'); -- 返回3
⚠️ 注意:若操作非数组类型会触发错误
3️⃣ 数据聚合大师:JSON_ARRAYAGG
应用场景:将查询结果打包为JSON数组
-- 基础用法
SELECT json_arrayagg(name) FROM comtable;
-- 结果:["a", "b", "c"]
-- 高级用法(排序+空值处理)
SELECT json_arrayagg(
name ORDER BY id DESC
NULL ON NULL
) FROM comtable;
参数详解:
ORDER BY
:控制数组元素顺序NULL/ABSENT ON NULL
:自定义空值处理策略RETURNING
:指定返回数据类型(如jsonb)
🎯 三、实战技巧
案例1:多层嵌套解析
SELECT
id,
jsonb_array_elements(jsonarray) AS item
FROM jsontable
WHERE id = 1;
解析包含混合类型(数值、布尔、对象)的复杂数组
案例2:动态生成配置数组
-- 生成带元数据的配置数组
SELECT json_arrayagg(
jsonb_build_object('id', id, 'status', active)
RETURNING jsonb
) FROM devices;
🚀 四、性能优化建议
- 类型选择:优先使用JSONB类型,支持索引且处理效率更高
- 批量操作:处理大型数组时,结合LATERAL JOIN提升性能
- 内存管理:JSON_ARRAYAGG处理大数据集时注意内存限制
📖 五、延展学习
✨ 更多JSON函数:
- 路径查询:
jsonb_path_query
- 数据修改:
jsonb_set
/jsonb_insert
- 类型转换:
jsonb_to_record
掌握这些JSON数组操作技巧,数据处理效率提升立竿见影!欢迎在评论区留言讨论实际应用场景,或分享你的独家使用心得💬
点击【收藏】随时查阅,【转发】帮助更多开发者提升效率!想了解更多KingbaseES黑科技?持续关注#金仓拾光集 🔥