如何在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
我有一个 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