首页 > 解决方案 > 检查 SQL Server 中的唯一 JSON 键

问题描述

在 SQL Server 中,如何检查字符串是否是有效的 JSON 并且键是否都是唯一的?

根据T-SQL 文档,常规 ISJSON 方法不会检查同一级别的键是否唯一。

标签: jsonsql-server

解决方案


您可以使用递归公用表表达式来执行此操作。例如:

DECLARE @json NVARCHAR(4000) = N'{  
   "StringValue":"John",  
   "IntValue":45,  
   "TrueValue":true,  
   "FalseValue":false,  
   "NullValue":null,  
   "ArrayValue":["a","r","r","a","y"],  
   "ObjectValue":{"obj":"ect"}  
}';

with q as
(
  select [key] path, [key], value, type, 0 level
  from openjson(@json)
  union all
  select concat(q.path,'\',n.[key]), n.[key], n.value, n.type, q.level + 1
  from q 
  cross apply openjson(q.value) n
  where q.type in (4,5)
 )
 select *, count(*) over (partition by path) pathCount
 from q

推荐阅读