在SQL Server 2019中如何使用JSON_VALUE函数解析数据

轻磊小哥_6281

轻磊小哥_6281

2026-09-06

569人浏览

原创

json_value总返回null是因为输入非json、路径错误或指向非标量值;需先用isjson验证,路径须以$开头、严格匹配键名大小写和中文转义,且仅支持标量提取。

在sql server 2019中如何使用json_value函数解析数据

JSON_VALUE 在 SQL Server 2019 中能用,但只返回标量值(字符串、数字、布尔、null),且对输入和路径极其敏感——写错一点就静默返回 NULL,不是函数坏了,是条件没满足。

为什么 JSON_VALUE 总是返回 NULL?先查 ISJSON 和路径合法性

它不报错,只沉默失败。最常踩的坑就三个:

  • ISJSON(json_col) 返回 0:字段里存的是 HTML 片段、带换行的普通文本、或未转义双引号的字符串,根本不是合法 JSON
  • 路径没以 $ 开头,比如写成 'name' 而不是 '$.name'
  • 路径指向了对象或数组,比如 '$.items'items 是数组)或 '$.address'address 是对象)——JSON_VALUE 只认标量,遇到就返回 NULL

安全做法:在查询前加 WHERE ISJSON(json_col) = 1,再单独用 SELECT JSON_VALUE(json_col, '$.xxx') 测试路径是否真能取到值。

中文键名、数组索引、大小写必须严格匹配

SQL Server 的路径解析是字面量匹配,不自动容错:

jm-jsjkxyjs02-pzl-803
jm-jsjkxyjs02-pzl-803

查询全球任意城市的实时天气和未来天气预报

下载
  • 中文键名必须用方括号转义:'$.["收货地址"]',不能写 '$.收货地址'
  • 取数组第一项的字段:'$[0].price',不能漏掉 [0] 或写成 '$.items.price'
  • 键名大小写敏感:'$.Name''$.name' 是两个路径,一个可能返回值,另一个返回 NULL
  • 不能用点号访问数字键:'$.0.name' 非法,得写成 '$[0].name'

在视图或存储过程中使用时,类型和长度不能省

参数或字段声明错误,会导致隐式截断或乱码,后续 JSON_VALUE 必然失效:

  • 存储过程参数必须是 NVARCHAR(MAX),不能用 VARCHAR(中文会乱)或 TEXT(不支持 JSON 函数)
  • 表中 JSON 字段建议定义为 NVARCHAR(MAX);如果用了 VARCHAR(200) 却存了 300 字节 JSON,超出部分被丢弃,ISJSON 就会返回 0
  • 视图里多次调用 JSON_VALUE(如提取 5 个字段),每行都会重复解析整段 JSON,执行计划里会出现多个 Compute Scalar,大表上性能明显下降

JSON_VALUE vs JSON_QUERY:别拿它去取对象或数组

这是最易混淆也最常出错的点:

  • JSON_VALUE(json_col, '$.status') → 返回 'success'(字符串)或 123(数字,但类型仍是 varchar(4000)
  • JSON_VALUE(json_col, '$.items') → 返回 NULL(因为 items 是数组)
  • 要取整个 items 数组,得用 JSON_QUERY(json_col, '$.items'),它返回原样 JSON 字符串,可进一步交给 OPENJSON 展开
  • 需要同时取多个字段(尤其跨层级),优先用 OPENJSON + WITH 子句,一次解析、结构清晰、还能映射类型

真正麻烦的不是语法,而是所有 JSON 函数都基于字符串实时解析,没有缓存。同一段 JSON 在一个查询里被 JSON_VALUE 调用三次,就解析三次——这点在复杂视图或嵌套 CTE 里特别容易被忽略。

相关专题

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

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

2023.08.07

1955

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

4291

4

Vibeknow在线使用入口合集
Vibeknow在线使用入口合集

本专题汇总了Vibeknow在线创作视频的官方入口及网页版使用教程,涵盖PPT、PDF、Word等文档一键转讲解视频的核心操作,并整理了免费版水印规则与手机端浏览器访问指南,助你快速将知识内容视频化。

2026.09.21

0

20

NumPy随机数文件读写与dtype数据类型
NumPy随机数文件读写与dtype数据类型

本专题整理 NumPy 随机数、文件读写与 dtype 数据类型相关教程,覆盖 Generator/random、随机数种子、正态分布采样、npy/npz/CSV/TXT 保存读取、loadtxt/savetxt、memmap、大文件处理、astype 类型转换、结构化 dtype、整数溢出和精度丢失等场景。

2026.09.21

0

24

NumPy矩阵运算与线性代数计算
NumPy矩阵运算与线性代数计算

本专题整理 NumPy 矩阵运算与线性代数计算相关教程,覆盖矩阵乘法、dot 与 @ 运算符、逆矩阵、行列式、特征值与特征向量、SVD、线性方程组、欧氏距离、矩阵分解和大规模矩阵性能优化等内容,帮助读者掌握 np.linalg 与矩阵计算实战。

2026.09.21

0

20

NumPy广播机制数学运算与统计分析
NumPy广播机制数学运算与统计分析

本专题整理 NumPy 广播机制、数组数学运算与统计分析相关教程,覆盖广播规则、维度对齐、矩阵与数组加减除法、向量化计算、均值方差、分位数、中位数、直方图和 unique 频次统计等场景,帮助读者掌握 ndarray 高效计算与统计处理方法。

2026.09.21

0

17

热门下载

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

精品课程

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

共101课时 | 20.4万人学习

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

共39课时 | 4.7万人学习