如何在SQL中检查json格式?

How to check json format in SQL?

我有一个 table,其中有一列类型为 Nvarchar,其中存储了 json。但是它的某些列的格式是错误的。所以当我解析它们时出现错误。

我希望我的查询忽略有错误的行。

SELECT *
FROM RequestLogs
CROSS APPLY OPENJSON(body) WITH(
    user varchar(60) '$.user',
    pass varchar(60) '$.pass'
    ) as a

当我在所有行上 运行 时出现此错误:

JSON text is not properly formatted. Unexpected character '.' is found at position 0.

,但它在 top 10.

上正确执行

如果我没听错,你可以使用 ISJSON() 来检查 body 的有效性,然后再将其传递给 OPENJSON():

SELECT *
FROM (SELECT * FROM RequestLogs WHERE ISJSON(body) = 1) as r
CROSS APPLY OPENJSON(body) WITH(
    user varchar(60) '$.user',
    pass varchar(60) '$.pass'
) as a

这会过滤掉内容无效的行。如果你想保留它们,并 return 一个 null 结果,那么:

SELECT r.*, a.*
FROM RequestLogs r
CROSS APPLY (VALUES(CASE WHEN WHERE ISJSON(r.body) = 1 THEN r.body END)) as x(body)
CROSS APPLY OPENJSON(x.body) WITH(
    user varchar(60) '$.user',
    pass varchar(60) '$.pass'
) as a

当然,您可以像这样识别有问题的行:

SELECT body
FROM RequestLogs 
WHERE ISJSON(body) = 0