首页 游戏 软件 资讯 排行榜 专题
首页
数据库
SQL如何判断字符串是否为合法JSON格式_利用ISJSON函数验证

SQL如何判断字符串是否为合法JSON格式_利用ISJSON函数验证

热心网友
64
转载
2026-04-25

SQL如何判断字符串是否为合法JSON格式?利用ISJSON函数验证

SQL如何判断字符串是否为合法JSON格式_利用ISJSON函数验证

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

在数据处理的日常工作中,我们常常会遇到这样的场景:一个文本字段里塞满了各种字符串,你怎么快速判断哪些是结构规整的JSON,哪些只是“长得像”的无效文本?对于SQL Server 2016及更高版本的用户来说,答案非常明确——原生、可靠且高性能的ISJSON()函数是你的首选工具。当然,如果你还在使用低版本SQL Server,或者团队技术栈涉及MySQL、PostgreSQL等其他数据库,那就得另寻他法了。

ISJSON() 函数的基本用法和返回值含义

这个函数用起来很直观:它接收一个varcharnvarchar类型的字符串,然后返回一个整数。返回1,恭喜你,字符串语法正确,是个合法JSON;返回0,抱歉,语法有问题;如果输入本身就是NULL,那它也会返回NULL。这里有个关键点需要牢记:它只做最基础的语法裁判,不负责审查语义。也就是说,字段名是否重复、数字会不会溢出、业务逻辑是否合理,这些它一概不管。

不过,在实际使用中,有几个坑很容易踩到:

  • 别直接把TEXTXML类型扔给它,会报错。稳妥的做法是显式转换成varchar(max)nvarchar(max)
  • 空字符串''会返回0,它可不是合法的JSON。但有意思的是,小写的'null'反而会返回1,因为它在JSON规范里是一个有效的字面量。
  • 带BOM(字节顺序标记)的UTF-8字符串要小心。SQL Server默认按Unicode解析,开头的BOM字符可能导致整个字符串被误判为非法。

在 WHERE 和 CHECK 约束中安全使用 ISJSON()

想在查询里快速过滤出有效JSON记录?直接在WHERE子句里加上ISJSON(json_col) = 1就行。但这里有个性能问题:ISJSON()是一个计算列函数,它无法直接利用普通列上的索引。如果这张表查询频率很高,更优的策略是创建一个持久化的计算列,并为此列建立索引:

ALTER TABLE logs ADD json_valid AS ISJSON(payload);
CREATE INDEX IX_logs_json_valid ON logs(json_valid) WHERE json_valid = 1;

另一个经典用法是在表定义中加入CHECK约束,强制保证入库数据的格式:

ALTER TABLE config ADD CONSTRAINT CHK_payload_json CHECK (ISJSON(payload) = 1);

值得注意的是,这个约束对NULL值是默认放行的。因为ISJSON(NULL)返回NULL,而NULL = 1的结果是未知(UNKNOWN),不会触发约束失败。如果你要求该字段既不能为空又必须是合法JSON,记得额外加上payload IS NOT NULL的条件。

MySQL / PostgreSQL 怎么替代 ISJSON()?

如果你的技术栈是MySQL 5.7+,那么事情就简单多了,它提供了行为高度一致的JSON_VALID()函数,用法几乎一样:JSON_VALID(json_str) = 1。不过,不同数据库引擎对JSON标准的“宽容度”略有差异。比如,某些在SQL Server里能通过的(像末尾带逗号的{"a":1,}),在MySQL的严格校验下可能就会返回0

PostgreSQL的情况则不同,它没有直接对标的内置标量函数。通常有两种变通方案:

  • 在PL/pgSQL代码块中,尝试用jsonb 'your_string'进行强制转换,并通过异常捕获(EXCEPTION WHEN invalid_text_representation)来判断是否合法。但这仅限于存储过程或函数上下文。
  • 更通用的做法是在应用层校验,或者在视图中使用jsonb_path_exists(jsonb_col, '$')。虽然这不是严格的语法校验(它检查的是路径是否存在),但对于绝大多数标准JSON字符串,它都能返回true,性能也尚可接受。

进行跨数据库迁移时,千万别想当然地认为校验结果会完全一致。空格和换行的处理、Unicode转义序列、以及像NaN/Infinity这类特殊数值的表示,都可能成为潜在的兼容性陷阱。

ISJSON() 不能代替业务逻辑校验

这是最重要的一环,必须清醒认识:ISJSON()只回答“这串字符能不能被解析”,绝不回答“这JSON是不是我业务上需要的样子”。

举个例子:{"user_id": "abc", "age": "twenty"}能轻松通过语法校验,但你的业务很可能要求user_id是整数、age是数字。再比如,{"items": [1,2,3], "items": ["a","b"]}在SQL Server里是合法的(后一个items会覆盖前一个),但你的业务逻辑可能根本不允许键名重复。

所以,在真正部署上线前,务必用真实的、可能“脏”的数据集进行充分测试。那些包含控制字符、嵌套层级过深、混合了多种编码、或者转义符不完整的字符串,都可能让ISJSON()给出“假阳性”的判断。语法正确只是第一步,符合业务schema才是终点。后续的JSON_VALUE()提取、类型转换以及条件判断,这些实实在在的业务规则校验,一步都不能少。

来源:https://www.php.cn/faq/2347728.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

CSS如何实现颜色随鼠标位置改变_JS监听坐标并更新CSS变量
前端开发
CSS如何实现颜色随鼠标位置改变_JS监听坐标并更新CSS变量

核心是监听mousemove事件获取clientX clientY,用throttle节流并归一化,通过document documentElement style setProperty设置CSS变量,在CSS中用hsl()或color-mix()动态生成颜色,注意移动端需兼容touchmove及

热心网友
04.25
SQL如何判断字符串是否为合法JSON格式_利用ISJSON函数验证
数据库
SQL如何判断字符串是否为合法JSON格式_利用ISJSON函数验证

SQL如何判断字符串是否为合法JSON格式?利用ISJSON函数验证 在数据处理的日常工作中,我们常常会遇到这样的场景:一个文本字段里塞满了各种字符串,你怎么快速判断哪些是结构规整的JSON,哪些只是“长得像”的无效文本?对于SQL Server 2016及更高版本的用户来说,答案非常明确——原生、

热心网友
04.25
如何通过“读写分离”策略有效规避 JS 频繁操作导致的页面帧率抖动
前端开发
如何通过“读写分离”策略有效规避 JS 频繁操作导致的页面帧率抖动

如何通过“读写分离”策略有效规避 JS 频繁操作导致的页面帧率抖动 问题的核心,其实在于把“读布局”和“写样式”这两件事彻底拆开,别让它们在同一轮 Ja vaScript 执行里混着来。这样一来,浏览器才有机会把一堆写操作攒起来,推迟到下一帧之前统一处理,从而避免反复触发代价高昂的回流(reflow

热心网友
04.25
如何调整图表生成工具的默认配色_Chart.js集成与主题对齐
数据库
如何调整图表生成工具的默认配色_Chart.js集成与主题对齐

Chart js 默认配色在哪改?不是靠 CSS 很多开发者第一个念头是用 CSS 去覆盖 Chart js 的配色,结果发现根本行不通。问题出在哪?其实,Chart js 的渲染逻辑和传统网页元素不同,它的颜色体系完全由 Ja vaScript 的 Chart defaults 配置对象控制。如果

热心网友
04.24
HTML中template列表渲染 HTML中template标签结合原生JS
前端开发
HTML中template列表渲染 HTML中template标签结合原生JS

HTML中template列表渲染:HTML中template标签结合原生JS 先明确一个核心概念:template标签本身在浏览器里是“隐身”的。它不渲染、不执行、也不做任何数据绑定,本质上就是一个离线的结构仓库。想用它来实现列表渲染?必须依靠Ja vaScript手动完成克隆、填充数据和插入DO

热心网友
04.24

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

2025年BTC最佳买入时机分析与操作策略
web3.0
2025年BTC最佳买入时机分析与操作策略

2025年比特币最佳买入时机分析与操作策略 想在2025年的加密市场里找准节奏?这确实是个技术活。市场的高波动性人所共知,影响因素又盘根错节,能否科学地判断买入时机,几乎直接决定了投资的最终回报。今天,我们就来系统性地拆解这个问题。 主流交易平台便捷入口 工欲善其事,必先利其器。在深入分析之前,先确

热心网友
04.25
松下按摩椅维修手册适用于哪些型号?
电脑教程
松下按摩椅维修手册适用于哪些型号?

松下按摩椅维修手册:一份覆盖主流型号的“通用说明书” 这份维修手册,可以说是松下REAL PRO系列按摩椅的“核心维修指南”。它主要针对EP-MA100、EP-MA101、EP-MA111以及EP-MA03H492这几款主流型号。为什么一份手册能管这么多款?关键在于它们都源自同一个技术平台:全都搭载

热心网友
04.25
剪映新闻类文字模板位置-新闻类文字模板怎么找不到
电脑教程
剪映新闻类文字模板位置-新闻类文字模板怎么找不到

想在剪映里给视频加上新闻范儿的标题和字幕,却发现怎么也找不到对应的模板?别急,这个需求很常见。下面这份详细的步骤指南,能帮你快速搞定,做出专业感十足的新闻风格视频。 剪映新闻类文字模板在哪 其实,新闻类文字模板就藏在剪映专业版的文本功能里。第一步,打开剪映专业版,在首页找到并点击进入“文本”模块,这

热心网友
04.25
游戏键盘如何选择机械轴体?
电脑教程
游戏键盘如何选择机械轴体?

选择游戏键盘的机械轴体,关键在于匹配你的核心使用场景与操作习惯 说到底,挑游戏键盘的轴体,没有标准答案,只有更贴合你指尖逻辑的那一款。FPS玩家追求的是极致的快与准,短触发、快响应的线性轴(比如银轴、暴打柠檬轴)是首选,它们的触发行程普遍压在1 5–1 8mm,压力克数在40–45gf之间,为的就是

热心网友
04.25
剪映dv录制框在哪里-dv录制框的详细步骤
电脑教程
剪映dv录制框在哪里-dv录制框的详细步骤

剪映DV录制框在哪里?一份清晰的操作指南 不少朋友在剪辑视频时,想给画面加上那种复古的DV录制框效果,却在剪映里怎么也找不到入口。别急,这其实是一个内置的素材,只需要几步就能调用。下面这份详细的步骤解析,能帮你快速定位并应用这个效果。 剪映DV录制框在哪里 首先,打开剪映专业版,在首页的顶部工具栏中

热心网友
04.25