我有一个非常大的源 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/