JSON_VALID()

JSON_VALID() 测试字符串是否为语法上有效的 JSON 值。有效 JSON 返回 1,无效 JSON 返回 0,参数为 NULL 时返回 NULL。

函数说明

JSON_VALID() 解析输入字符串并检查其是否符合 JSON 语法。任何有效的 JSON 值(对象、数组、字符串、数字、布尔值或 null)返回 1。格式错误的 JSON 字符串、非 JSON 字符串和空字符串返回 0。

该函数可用于 WHERE 子句中过滤包含有效 JSON 的行,或在 HAVING 中与 GROUP BY 配合统计有效与无效 JSON 值的数量。

Syntax

> JSON_VALID(val)

Arguments

参数

说明

val

必填。要测试 JSON 有效性的字符串。可以是字符串字面量、列引用或 JSON 函数的结果。

Examples

DROP DATABASE IF EXISTS dbfuncs;
CREATE DATABASE dbfuncs;
USE dbfuncs;

-- 有效的 JSON 值
SELECT JSON_VALID('{"a": 1}');
SELECT JSON_VALID('[1, 2, 3]');
SELECT JSON_VALID('"hello"');
SELECT JSON_VALID('null');
SELECT JSON_VALID('true');
SELECT JSON_VALID('false');
SELECT JSON_VALID('42');
SELECT JSON_VALID('3.14');
SELECT JSON_VALID('{}');
SELECT JSON_VALID('[]');

-- 无效 JSON
SELECT JSON_VALID('hello');
SELECT JSON_VALID('');

-- NULL 参数
SELECT JSON_VALID(NULL);

-- 嵌套 JSON
SELECT JSON_VALID('{"a": {"b": [1,2,3]}, "c": "hello"}');
SELECT JSON_VALID('[{"a":1}, [2,3], "str"]');

-- 无效 JSON 字符串
SELECT JSON_VALID('{invalid');
SELECT JSON_VALID('[1,2,');
SELECT JSON_VALID('{"a":}');
SELECT JSON_VALID('{key: "no_quotes"}');

-- 通过 JSON 函数(始终有效)
SELECT JSON_VALID(JSON_OBJECT('a', 1, 'b', 2));
SELECT JSON_VALID(JSON_ARRAY(1, 2, 3));

-- 表中使用 VARCHAR 列
CREATE TABLE t1 (a VARCHAR(100));
INSERT INTO t1 VALUES ('{"a":1}'), ('[1,2,3]'), ('"hello"'), ('{}'), ('invalid'), (NULL), ('');
SELECT a, JSON_VALID(a) FROM t1;

-- WHERE 子句过滤
SELECT * FROM t1 WHERE JSON_VALID(a);

-- GROUP BY 与 HAVING
SELECT JSON_VALID(a), COUNT(*) FROM t1 GROUP BY JSON_VALID(a) ORDER BY 1;

DROP TABLE t1;
DROP DATABASE dbfuncs;