json - 当源未格式化为集合时使用 OPENJSON

标签 json t-sql sql-server-2016

我有一个非常大的源 JSON 文件,其中包含大量未格式化为集合的实体集合;每个实体之间没有封装方括号和逗号分隔符。因此,想象一下,我得到的不是“[{},{}]”,而是“{}{}”。我正在尝试使用 OPENJSON 查询它,但在当前结构中我只获得第一条记录。

这就是我正在做的有效事情:

DECLARE @json VARCHAR(MAX)
SET @json =   
 N'  
    {  
    "Id":1
    } 
    {  
    "Id":2
    }  
'  

SELECT * FROM  
OPENJSON (@json)  
WITH (Id INT)

我得到了一个结果,即记录 1。有没有办法查询当前的结构,或者我是否已经准备好尝试重新格式化源代码?

最佳答案

根据 Rob 的建议,您需要进行一些预格式化。

根据他的建议......如果“json”如您所描述的那样,这将起作用。我不希望它在处理大量文本时表现得那么好。如果您的 JSON 比这更复杂并且包含嵌套实体,我会跳过 T-SQL 并使用 C# 或 PowerShell

DECLARE @json VARCHAR(MAX)
SET @json =   
 N'  
    {  
    "Id":1
    } 
    {  
    "Id":2
    }  
'  

SELECT * FROM  
OPENJSON (
    (SELECT '[' + STUFF(REPLACE(@json, '{', ',{'),  CHARINDEX('{', @json), 1, '') + ']')
    )
WITH (Id INT)

如果您可以在导入数据库时​​进行预格式化,那么总体而言这可能是更好的方法

关于json - 当源未格式化为集合时使用 OPENJSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40559917/

相关文章:

sql - 从最后两个方括号中提取数据 SQL

windows-services - 始终加密的功能 - 无法解密列。从 Windows 服务应用调用

sql-server - 在 SQL Server 中查询复杂的 JSON - 过滤对象数组

json - 在Swift 3中正确解析JSON

sql - SQL Server 中的表别名和使用 Exists

xml - SQL Server 2008 查询 Soap XML

SQL Server 2016 - 动态数据屏蔽 (DDM)

python - Python 中字典列表的条件操作

javascript/ajax登录系统

Javascript - 解析长 GET 请求 JSON