怎样在SQL Server 2022中用JSON_PATH查询嵌套数组

冬芳大大_4368

冬芳大大_4368

2026-09-18

517人浏览

原创

sql server 2022 中 json_path_exists 不支持带过滤器的路径(如 $?(@.grade>5)),仅支持基础路径;需用 openjson 展开嵌套数组并配合 where 筛选,多层嵌套须逐级调用 openjson。

怎样在sql server 2022中用json_path查询嵌套数组

JSON_PATH_EXISTS 不能直接查嵌套数组元素值

SQL Server 2022 的 JSON_PATH_EXISTS 只返回布尔值(1 或 0),不提取内容。想查“某个嵌套数组里是否存在满足条件的元素”,得用 OPENJSON 配合 WHERE,而不是依赖路径函数本身返回数据。

常见错误现象:SELECT JSON_PATH_EXISTS(doc, '$.children[?(@.grade > 5)]') 看似合理,但该函数在 2022 中不支持带过滤器的 SQL/JSON 路径(如 [?(@.grade > 5)]),会报错 Invalid JSON path expression —— 这个语法是 SQL Server 2025 预览版才支持的。

  • 2022 中能用的路径仅限基础结构:如 $.children[0].grade$.children[1].pets[0].givenName
  • 带过滤器的路径([?(@.xxx)])或通配符([*])在 2022 中无效,强行使用会触发解析失败
  • 若需条件匹配,必须先用 OPENJSON 展开数组,再用 T-SQL 过滤

用 OPENJSON 展开 children 数组并关联父级字段

处理类似 {"children": [{"givenName":"Jesse","grade":1}, {"givenName":"Lisa","grade":8}]} 这类结构时,不能只靠 JSON_VALUE 提取单个位置的值;必须把数组“摊平”成行集才能做条件筛选或聚合。

实操要点:

  • 第一层 OPENJSON(@json, '$.children') 返回每个 child 为一行,key 是索引,value 是子对象 JSON 字符串
  • value 再套一层 OPENJSON,就能提取 givenNamegrade 等字段
  • 外层查询需用 WITH 显式定义列名和类型,否则所有字段都是 nvarchar(max)
  • 别漏掉 AS json 别名,否则第二层 OPENJSON 无法引用上层展开结果

示例:

DECLARE @json NVARCHAR(MAX) = N'{
  "id": "DesaiFamily",
  "children": [
    {"givenName": "Jesse", "grade": 1, "gender": "female"},
    {"givenName": "Lisa", "grade": 8, "gender": "female"}
  ]
}';
<p>SELECT 
f.id,
c.givenName,
c.grade
FROM OPENJSON(@json) WITH (
id NVARCHAR(100) '$.id',
children NVARCHAR(MAX) AS JSON
) AS f
CROSS APPLY OPENJSON(f.children) 
WITH (
givenName NVARCHAR(50) '$.givenName',
grade INT '$.grade',
gender NVARCHAR(10) '$.gender'
) AS c
WHERE c.grade > 5;</p>

处理多层嵌套(如 children → pets)必须嵌套 OPENJSON

当 JSON 中存在“数组套数组”结构(如每个 child 有多个 pets),不能用单层路径如 $.children[0].pets[0].givenName 批量提取——那只能取固定下标,无法泛化。

抖音下载器(Node.js)
抖音下载器(Node.js)

抖音无水印视频下载和文案提取工具

下载

正确做法是逐级展开:

  • 先用 OPENJSON 展开 children 数组,得到 child 行集
  • 对每一行的 pets 字段(本身是 JSON 数组字符串),再调一次 OPENJSON
  • 第二层 WITH 中定义 pet_name NVARCHAR(50) '$.givenName',即可拿到每只宠物名
  • 若某 child 没有 pets 字段或值为 nullCROSS APPLY 会跳过该 child;要用 OUTER APPLY 保留空 pets 的记录

关键细节:第二层 OPENJSON 的输入必须是字符串类型(NVARCHAR),所以第一层 WITHpets 列必须声明为 AS JSONNVARCHAR(MAX),不能写成 JSON 类型(SQL Server 2022 不支持原生 json 类型)。

性能与可读性平衡:避免三层以上 OPENJSON 嵌套

展开深度超过两层(如 family → children → pets → toys)会让 SQL 变得难维护,且执行计划中嵌套循环增多,影响性能。

更可控的做法:

  • 把中间层结果存入临时表(#children),加索引后供后续 JOIN 使用
  • JSON_QUERY 提前截取子结构(如 JSON_QUERY(doc, '$.children')),再对临时字段展开,减少重复解析
  • 确认业务是否真需要全部嵌套数据:有时只需统计 pets 数量,用 LEN(children) - LEN(REPLACE(children, '"givenName"', '')) 这类字符串技巧反而更快(但不可靠,仅作备选)
  • 2022 中没有 JSON_CONTAINS 对数组元素的高效判断,所以不要试图用它替代展开逻辑

最易被忽略的一点:所有 OPENJSON 调用都依赖输入字符串是合法 JSON,务必在上游用 ISJSON() 校验,否则遇到格式错误数据会直接中断整个查询。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

js json json数组 json处理

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2023.08.07

1935

5

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.23

2562

1

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

2023.10.13

896

3

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2025.09.10

2859

7

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.11

4271

4

NumPy数组创建索引切片与数据选择
NumPy数组创建索引切片与数据选择

本专题整理 NumPy 数组创建、索引、切片与数据选择相关教程,覆盖 np.array、zeros/ones、多维数组形状、基础切片、花式索引、布尔索引、条件筛选、视图与副本等常用场景,帮助读者系统掌握 ndarray 数据构造与高效提取方法。

2026.09.21

0

12

Aionclaw智能助手介绍
Aionclaw智能助手介绍

本专题汇总了AionClaw(AI龙虾助手)的功能介绍与在线使用入口。AionClaw是杭州趣猿人工智能有限公司推出的桌面级AI智能体,能直接在电脑上读写文件、运行脚本、操作浏览器,自动交付Word、PPT、Excel等成品。

2026.09.20

20

13

AionClaw AI智能体与电脑自动化任务执行功能使用教程
AionClaw AI智能体与电脑自动化任务执行功能使用教程

AionClaw专题整理AI智能体与电脑自动化相关功能使用教程,涵盖安装部署、AI任务执行、Skills技能、文件处理、浏览器控制、电脑操作、持久记忆、聊天工具连接以及办公、编程和内容创作等功能,帮助用户快速掌握AionClaw的实际使用方法。

2026.09.20

0

15

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

2026.09.16

180

9

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 20.4万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 4.7万人学习