怎样在SQL中使用OPENJSON函数将JSON数组转换为关系表

梦芳小哥_5516

梦芳小哥_5516

2026-09-19

104人浏览

原创

必须配合with子句才能返回结构化列;裸调openjson仅输出key/value/type三列,无法映射业务字段;路径以$.开头且区分大小写,需严格匹配json层级结构。

怎样在sql中使用openjson函数将json数组转换为关系表

OPENJSON 函数必须配合 WITH 子句才能返回结构化列

直接调用 OPENJSON(不带 WITH)只返回三列:keyvaluetype,无法映射 JSON 字段到自定义列名。想把 [{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}] 变成两行两列的关系结果,必须显式声明结构。

常见错误是写成:

SELECT * FROM OPENJSON('[{"id":1,"name":"Alice"}]')

这只会输出原始键值对,不是你想要的表格。正确做法是:

SELECT * FROM OPENJSON('[{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}]')
WITH (
    id INT '$.id',
    name NVARCHAR(50) '$.name'
)

JSON 路径表达式中 $. 表示当前数组元素,不是根对象

WITH 子句里写的路径(如 '$.id')是相对于每个数组项的,不是整个 JSON 字符串的根。这点容易误解,尤其当 JSON 嵌套时。

比如解析这个结构:

[{"user":{"id":1,"info":{"name":"Alice"}}},{"user":{"id":2,"info":{"name":"Bob"}}}]

要提取 name,路径得写成 '$.user.info.name',而不是 '$.info.name' —— 因为每个数组元素本身是 {"user":{...}},不是 {"info":...}

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

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

下载
  • 路径必须以 $. 开头,不能省略
  • 路径区分大小写,'$.Name''$.name' 是不同的
  • 如果字段可能缺失,加 AS JSON 或用 ISNULL() 包裹转换结果,避免 NULL 导致整行丢失

OPENJSON 不支持直接解析顶层非数组 JSON 对象

如果输入是单个对象(如 {"id":1,"name":"Alice"}),不是数组,OPENJSON 默认不会把它当一行处理——它会把对象展开成属性行,返回多行(每行一个 key-value)。这不是你想要的“转成一张表”。

解决方法只有两个:

  • 把单对象包成数组:OPENJSON('[' + @json + ']')
  • 或先用 JSON_VALUE 提取字段,不走 OPENJSON 路线

注意:SQL Server 2016+ 要求输入必须是 NVARCHAR(MAX) 类型,传 VARCHAR 或短字符串会静默失败或截断。

性能和 NULL 处理容易被忽略

OPENJSON 是行集函数,内部会逐行解析 JSON,大数据量(>10k 元素)时明显慢于原生表连接。别在 WHERE 或 JOIN 中嵌套复杂 OPENJSON 调用,先存到临时表再处理更稳。

另外,JSON 字段类型不一致会导致转换失败:

  • id INT '$.id' 遇到 "id": "1"(字符串)会返回 NULL,不是报错
  • 想强制转换,得用 JSON_VALUE + TRY_CAST 组合,例如:TRY_CAST(JSON_VALUE(value, '$.id') AS INT)
  • WITH 子句里没声明的字段,哪怕 JSON 里有,也不会出现在结果中

最常漏掉的是字符集:所有字符串列推荐用 NVARCHAR,否则中文会变问号;路径里也别混用单双引号,SQL Server 只认单引号。

相关文章

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

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

下载

相关标签:

js json json数组

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

相关专题

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

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

2023.08.07

1935

5

json是什么
json是什么

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

2023.08.23

2542

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

2839

7

sqlserver和mysql区别
sqlserver和mysql区别

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

2023.08.11

4251

4

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

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

2026.09.20

0

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

ai生成视频的工具免费版合集
ai生成视频的工具免费版合集

本专题汇总了当前免费AI生成视频工具的排行榜与推荐清单,涵盖seko、讯飞智作、AniShort及剧云、Lovart等多模型集成平台。同时整理了各工具的免费额度、输出时长、水印政策及适用场景差异,助您快速选择合适工具开启AI视频创作。

2026.09.16

60

10

热门下载

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

精品课程

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

共101课时 | 20.4万人学习

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

共39课时 | 4.7万人学习