京公网安备 11010802034615号
经营许可证编号:京B2-20210330
SQL Server 提供了许多用于处理 JSON 数据的功能,其中之一是解析 JSON 数组。在此篇文章中,我将会介绍如何在 SQL Server 中解析 JSON 数组以及一些相关的注意事项。
JSON 数组的基本概念
JSON 数组是一种存储多个值的方式,每个值都可以是一个简单的类型(例如字符串、数字或布尔值)或者是一个复杂的类型(例如对象或其他数组)。JSON 数组由方括号 [] 包围,其中的值使用逗号分隔。
示例:
[ { "name": "John", "age": 30, "city": "New York" }, { "name": "Mary", "age": 25, "city": "Los Angeles" } ]
以上是一个包含两个对象的 JSON 数组,每个对象都有 name、age 和 city 三个属性。
SQL Server 如何解析 JSON 数组
SQL Server 提供了 OPENJSON 函数来解析 JSON 数据。通过这个函数,你可以将 JSON 数组转换成表格形式,每行代表一个数组元素,每列代表一个属性。
以下是 OPENJSON 函数的基本语法:
OPENJSON(json_expression[, path]) [WITH (property_name data_type [,...])]
示例:
DECLARE @json NVARCHAR(MAX) SET @json = '[{"name": "John","age": 30,"city": "New York"},{"name": "Mary","age": 25,"city": "Los Angeles"}]' SELECT * FROM OPENJSON(@json)
以上 SQL 查询将会返回以下结果:
+-----------+-------+-------------+
| key | value | type |
+-----------+-------+-------------+
| 0 | -- | 5 (= JSON_ARRAY)|
| [0].name | John | 1 (= JSON_STRING)|
| [0].age | 30 | 2 (= JSON_INT)|
| [0].city | New York | 1 (= JSON_STRING)|
| 1 | -- | 5 (= JSON_ARRAY)|
| [1].name | Mary | 1 (= JSON_STRING)|
| [1].age | 25 | 2 (= JSON_INT)|
| [1].city | Los Angeles | 1 (= JSON_STRING)|
+-----------+-------+-------------+
在上面的查询中,我们使用了 OPENJSON 函数来解析 JSON 数组,并且没有指定 path 参数。因此,整个 JSON 对象都被解析了。OPENJSON 函数返回了一个表格,其中每行代表一个数组元素,每列代表一个属性。具体来说,表格包含三列:
注意事项
在使用 OPENJSON 函数时,需要注意以下几点:
总结
SQL Server 提供了 OPENJSON 函数来解析 JSON 数据,可以将 JSON 数组转换成表格形式,方便后续的数据处理。在
使用 OPENJSON 函数时,需要注意传入的 JSON 数组必须是有效的 JSON 格式,并且如果数组中包含了对象数组,则需要使用嵌套的 OPENJSON 函数来解析。此外,OPENJSON 函数只能返回基本数据类型,如果要返回复杂数据类型,需要进行一些转换操作。
在处理多维数组时,可以使用 CROSS APPLY 子句来展开数组。以下是一个具有嵌套数组和对象的示例:
{ "name": "John", "age": 30, "hobbies": [ { "name": "reading", "level": 3 }, { "name": "swimming", "level": 2 } ] }
我们可以使用如下 SQL 查询来解析该 JSON 对象:
DECLARE @json NVARCHAR(MAX) SET @json = '{"name": "John","age": 30,"hobbies": [{"name": "reading", "level": 3}, {"name": "swimming", "level": 2}]}' SELECT name, age, hobby_name, hobby_level FROM OPENJSON(@json) WITH (
name VARCHAR(50),
age INT,
hobbies NVARCHAR(MAX) AS JSON
) AS person CROSS APPLY OPENJSON(person.hobbies) WITH (
hobby_name VARCHAR(50),
hobby_level INT );
以上 SQL 查询将会返回以下结果:
+------+-----+------------+-------------+ | name | age | hobby_name | hobby_level | +------+-----+------------+-------------+ | John | 30 | reading | 3 | | John | 30 | swimming | 2 | +------+-----+------------+-------------+
在查询中,我们使用了 CROSS APPLY 子句来展开 hobbies 数组,并用嵌套的 WITH 子句来解析数组中的对象。最终得到包含两列的结果集,其中每行代表一个 hobby 兴趣。
结论
在 SQL Server 中,可以使用 OPENJSON 函数来解析 JSON 数组。通过将 JSON 数组转换为表格形式,可以方便地进行后续的数据处理。在使用 OPENJSON 函数时,需要注意传入的 JSON 数组必须是有效的 JSON 格式,并且如果数组中包含了对象数组,则需要使用嵌套的 OPENJSON 函数来解析。此外,在处理多维数组时,可以使用 CROSS APPLY 子句来展开数组。
推荐学习书籍
《**CDA一级教材**》适合CDA一级考生备考,也适合业务及数据分析岗位的从业者提升自我。完整电子版已上线CDA网校,累计已有10万+在读~

免费加入阅读:https://edu.cda.cn/goods/show/3151?targetId=5147&preview=0
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
核心资源推荐 CDA教材(2025):https://edu.cda.cn/goods/show/3151CDA模拟题(2025):https://edu.cda.cn/goods/show/2845CD ...
2026-10-26核心资源推荐 CDA教材(2025):https://edu.cda.cn/goods/show/3151CDA模拟题(2025):https://edu.cda.cn/goods/show/2845CD ...
2026-10-26运营岗的技能提升,最容易走偏的一步是先去学工具。Excel、SQL、Python 都值得学,但如果不知道自己要回答什么业务问题、指标口 ...
2026-10-26营销人提升业务能力,最常见的误区是“缺什么补什么”:文案不行学写作,投放不行学出价,活动效果差就再学一套裂变玩法。零散技 ...
2026-10-26营销经理的能力提升,最容易走成两条弯路:一条是零散学工具,Excel、SQL、Python挨个报课,学完却不知道用在哪;另一条是把“提 ...
2026-10-26营销经理的沟通难点,很少是“不会说话”。更多时候是三类具体卡点:向管理层汇报,讲了十分钟还没说到结论;向产品、财务、销售 ...
2026-10-26营销岗位的能力提升,最容易走偏的一条路是先学工具。Excel、SQL、Python排着队学,学完却发现日常工作中还是说不清一场活动到底 ...
2026-10-26营销岗日常要回答的问题其实很集中:这次投放带来多少有效线索,活动哪一步掉得最多,新客和老客谁在复购,渠道花出去的钱能不能 ...
2026-10-26营销策划问“最应该掌握什么数据分析技能”,答案不是先学某个工具,而是先掌握把活动目标拆成指标与口径、再用数据评估活动效果 ...
2026-10-26信贷专员的培训课不少,难的是选课顺序。常见误区是看到“数据分析”“风险建模”就报名,学完却发现与手头工作接不上;也有人反 ...
2026-10-26信贷专员的核心工作,是把一笔贷款从客户申请一路管到结清:贷前判断客户还得起吗,贷中盯住条件有没有落实、风险有没有变化,贷 ...
2026-10-26新媒体运营提升业务技能,不建议从“多学几个工具”开始。更有效的做法是先搭一个能力框架,再用岗位任务反推短板。可以按内容策 ...
2026-10-26营销岗位的沟通问题,很少是“嘴笨”。更多时候是三类信息没对齐:对面是谁、这次沟通要对方做什么、凭什么相信你。同一套话术, ...
2026-10-26一、SmartArt 是什么,为什么用它画流程图 在 Excel 里画流程图,很多人第一反应是插入"形状"——矩形、箭头、连线一个个手动画 ...
2026-10-26税务专员新人想快速上手,最有效的路径不是先背政策条文,而是先把日常任务跑通:发票台账能登记清楚、申报表能和账面数据对上、 ...
2026-10-26一、什么是聚类分析,什么时候用它 聚类分析是一种无监督学习方法,它把一批对象按照"相似性"自动分成若干组,让同一组内的对象 ...
2026-10-26税务专员日常要面对申报表、发票明细、税负台账和各类核对底稿,常用的数据分析模型其实集中在六类:对比分析、趋势分析、结构分 ...
2026-10-26数字营销专员提升知识,最有效的途径不是零散刷课、追热点工具,而是围绕岗位任务搭一张“渠道—内容—用户—数据”的知识骨架, ...
2026-10-26数字营销不是一个只靠创意和网感的岗位。招聘方在JD里写“熟悉投放”“会看数据”“能做用户增长”,背后其实是一套可以拆开的知 ...
2026-10-26先给结论:做业务分析、数据运营这类岗位,不需要先啃高数和线性代数,但描述统计、图表阅读和指标口径必须掌握;只有走建模、挖 ...
2026-10-26